
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 read_pt_len(int nn,int nbit,int i_special)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  byte bVar5;
  uint uVar6;
  uint uVar7;
  uch *puVar8;
  int iVar9;
  uch *in_stack_ffffffc8;
  int in_stack_ffffffcc;
  ush *puVar10;
  
  bVar5 = 0x10 - (char)nbit;
  iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f);
  fillbuf(nbit);
  iVar9 = 0;
  if (iVar1 == 0) {
    uVar7 = (uint)bitbuf;
    fillbuf(nbit);
    puVar8 = pt_len;
    do {
      *puVar8 = '\0';
      puVar8 = puVar8 + 1;
    } while (pt_len + nn != puVar8);
    puVar10 = pt_table;
    do {
      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));
      puVar10 = (ush *)((int)puVar10 + 2);
    } while ((uint *)puVar10 != &blocksize);
    return;
  }
  do {
    while( true ) {
      iVar2 = 3;
      uVar7 = (uint)(bitbuf >> 0xd);
      if (bitbuf >> 0xd == 7) {
        if ((bitbuf & 0x1000) == 0) {
          uVar7 = 7;
          iVar2 = 4;
        }
        else {
          uVar6 = 0x1000;
          uVar7 = 7;
          do {
            uVar3 = uVar7;
            uVar6 = uVar6 >> 1;
            uVar7 = uVar3 + 1;
          } while ((bitbuf & uVar6) != 0);
          if (0x10 < (int)uVar7) {
                    /* WARNING: Subroutine does not return */
            gzip_error("Bad table\n");
          }
          iVar2 = uVar3 - 2;
        }
      }
      puVar10 = (ush *)0x1aa37;
      fillbuf(iVar2);
      iVar2 = iVar9 + 1;
      pt_len[iVar9] = (uch)uVar7;
      if (iVar2 == i_special) break;
      iVar9 = iVar2;
      if (iVar1 <= iVar2) {
        if (nn <= iVar2) goto LAB_0001aa82;
        goto LAB_0001aa68;
      }
    }
    iVar4 = (int)(uint)bitbuf >> 0xe;
    puVar10 = (ush *)0x1ab0a;
    fillbuf(2);
    if (iVar4 != 0) {
      puVar8 = pt_len + iVar9;
      do {
        puVar8[1] = '\0';
        puVar8 = puVar8 + 1;
      } while (puVar8 != pt_len + iVar9 + iVar4);
      iVar2 = iVar2 + iVar4;
    }
    iVar9 = iVar2;
  } while (iVar2 < iVar1);
LAB_0001aa68:
  puVar8 = pt_len + iVar2;
  do {
    *puVar8 = '\0';
    puVar8 = puVar8 + 1;
  } while (puVar8 != pt_len + nn);
LAB_0001aa82:
  make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  undefined2 *puVar4;
  uint uVar5;
  undefined1 *puVar6;
  int iVar7;
  int iVar8;
  
  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);
  FUN_0001a5d0();
  iVar8 = 0;
  if (iVar1 == 0) {
    uVar2 = (uint)DAT_0002c9d4;
    FUN_0001a5d0();
    puVar6 = &DAT_0002cc00;
    do {
      *puVar6 = 0;
      puVar6 = puVar6 + 1;
    } while (&DAT_0002cc00 + param_1 != puVar6);
    puVar4 = &DAT_0002c9e0;
    do {
      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));
      puVar4 = puVar4 + 1;
    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);
    return;
  }
  do {
    while( true ) {
      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);
      if (DAT_0002c9d4 >> 0xd == 7) {
        if ((DAT_0002c9d4 & 0x1000) == 0) {
          uVar2 = 7;
        }
        else {
          uVar5 = 0x1000;
          uVar2 = 7;
          do {
            uVar5 = uVar5 >> 1;
            uVar2 = uVar2 + 1;
          } while ((DAT_0002c9d4 & uVar5) != 0);
          if (0x10 < (int)uVar2) {
                    /* WARNING: Subroutine does not return */
            FUN_0001c790("Bad table\n");
          }
        }
      }
      FUN_0001a5d0();
      iVar7 = iVar8 + 1;
      (&DAT_0002cc00)[iVar8] = (char)uVar2;
      if (iVar7 == param_3) break;
      iVar8 = iVar7;
      if (iVar1 <= iVar7) {
        if (param_1 <= iVar7) goto LAB_0001aa82;
        goto LAB_0001aa68;
      }
    }
    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;
    FUN_0001a5d0();
    if (iVar3 != 0) {
      puVar6 = &DAT_0002cc00 + iVar8;
      do {
        puVar6[1] = 0;
        puVar6 = puVar6 + 1;
      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);
      iVar7 = iVar7 + iVar3;
    }
    iVar8 = iVar7;
  } while (iVar7 < iVar1);
LAB_0001aa68:
  puVar6 = &DAT_0002cc00 + iVar7;
  do {
    *puVar6 = 0;
    puVar6 = puVar6 + 1;
  } while (puVar6 != &DAT_0002cc00 + param_1);
LAB_0001aa82:
  FUN_0001a6d0(&DAT_0002c9e0);
  return;
}


PUSH EBP
MOV EBP,EDX
PUSH EDI
XOR EDI,EDI
PUSH ESI
MOV ESI,0x10
PUSH EBX
SUB ESI,EDX
CALL 0x00012e10
ADD EBX,0xe61c
SUB ESP,0x1c
MOV dword ptr [ESP + 0x8],EAX
MOV dword ptr [ESP + 0x4],ECX
MOV ECX,ESI
MOVZX EAX,word ptr [EBX + 0x39d4]
SAR EAX,CL
MOV dword ptr [ESP],EAX
MOV EAX,EDX
CALL 0x0001a5d0
MOV EAX,dword ptr [ESP]
TEST EAX,EAX
JZ 0x0001ab4f
LEA ESI,[ESI]
MOVZX ECX,word ptr [EBX + 0x39d4]
MOV EAX,0x3
MOV ESI,ECX
SHR SI,0xd
MOV EBP,ESI
CMP SI,0x7
JZ 0x0001aab0
CALL 0x0001a5d0
MOV EAX,EBP
LEA ESI,[EDI + 0x1]
LEA ECX,[EBX + 0x3c00]
MOV byte ptr [EBX + EDI*0x1 + 0x3c00],AL
CMP ESI,dword ptr [ESP + 0x4]
JZ 0x0001aaf0
CMP ESI,dword ptr [ESP]
JGE 0x0001aa60
MOV EDI,ESI
JMP 0x0001aa18
MOV EDI,ECX
CMP dword ptr [ESP + 0x8],ESI
JLE 0x0001aa82
MOV EAX,EDI
ADD EAX,dword ptr [ESP + 0x8]
ADD ESI,EDI
MOV EBP,EAX
LEA ESI,[ESI]
MOV byte ptr [ESI],0x0
ADD ESI,0x1
CMP ESI,EBP
JNZ 0x0001aa78
SUB ESP,0xc
LEA EAX,[EBX + 0x39e0]
LEA EDX,[EBX + 0x3c00]
MOV ECX,0x8
PUSH EAX
MOV EAX,dword ptr [ESP + 0x18]
CALL 0x0001a6d0
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOVZX ESI,CX
AND CH,0x10
JZ 0x0001ab40
MOV ECX,0x1000
MOV EAX,0x7
JMP 0x0001aad2
MOV EAX,EDX
SHR ECX,0x1
LEA EDX,[EAX + 0x1]
TEST ESI,ECX
JNZ 0x0001aad0
CMP EDX,0x10
JG 0x0001aba2
SUB EAX,0x2
MOV EBP,EDX
JMP 0x0001aa32
MOVZX EAX,word ptr [EBX + 0x39d4]
MOV dword ptr [ESP + 0xc],ECX
SAR EAX,0xe
MOV EBP,EAX
MOV EAX,0x2
CALL 0x0001a5d0
TEST EBP,EBP
MOV EDX,EBP
MOV ECX,dword ptr [ESP + 0xc]
JZ 0x0001ab28
ADD EDX,ECX
LEA EAX,[ECX + EDI*0x1]
ADD EDX,EDI
MOV byte ptr [EAX + 0x1],0x0
ADD EAX,0x1
CMP EAX,EDX
JNZ 0x0001ab1b
ADD ESI,EBP
CMP dword ptr [ESP],ESI
JG 0x0001aa58
MOV EDI,ECX
JMP 0x0001aa68
MOV EBP,0x7
MOV EAX,0x4
JMP 0x0001aa32
MOVZX EDX,word ptr [EBX + 0x39d4]
MOV ECX,ESI
MOV EAX,EBP
SAR EDX,CL
MOV ESI,EDX
CALL 0x0001a5d0
MOV EDX,dword ptr [ESP + 0x8]
LEA EAX,[EBX + 0x3c00]
ADD EDX,EAX
NOP
MOV byte ptr [EAX],0x0
ADD EAX,0x1
CMP EDX,EAX
JNZ 0x0001ab70
MOV EDX,ESI
LEA EAX,[EBX + 0x39e0]
LEA ECX,[EBX + 0x3be0]
LEA ESI,[ESI]
NOP
MOV word ptr [EAX],DX
ADD EAX,0x2
CMP ECX,EAX
JNZ 0x0001ab90
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0xc
LEA EAX,[EBX + 0xffffa3ab]
PUSH EAX
CALL 0x0001c790
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0001a9d0(int param_1,char param_2,int param_3)" identifier (parameter_list "(int param_1,char param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined2 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined1 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);" (assignment_expression "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" identifier = (binary_expression "(int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)(uint)DAT_0002c9d4" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - param_2 & 0x1f)" ( (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" number_literal - identifier) & number_literal) )))) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" { (expression_statement "uVar2 = (uint)DAT_0002c9d4;" (assignment_expression "uVar2 = (uint)DAT_0002c9d4" identifier = (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar6 = &DAT_0002cc00;" (assignment_expression "puVar6 = &DAT_0002cc00" identifier = (pointer_expression "&DAT_0002cc00" & identifier)) ;) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);" do (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(&DAT_0002cc00 + param_1 != puVar6)" ( (binary_expression "&DAT_0002cc00 + param_1 != puVar6" (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" & identifier) + identifier) != identifier) )) ;) (expression_statement "puVar4 = &DAT_0002c9e0;" (assignment_expression "puVar4 = &DAT_0002c9e0" identifier = (pointer_expression "&DAT_0002c9e0" & identifier)) ;) (do_statement "do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);" do (compound_statement "{\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    }" { (expression_statement "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));" (assignment_expression "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" (pointer_expression "*puVar4" * identifier) = (cast_expression "(short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar2 >> (0x10U - param_2 & 0x1f))" ( (binary_expression "(int)uVar2 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - param_2 & 0x1f)" ( (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" number_literal - identifier) & number_literal) ))) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar4 != (undefined2 *)&DAT_0002cbe0)" ( (binary_expression "puVar4 != (undefined2 *)&DAT_0002cbe0" identifier != (cast_expression "(undefined2 *)&DAT_0002cbe0" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0002cbe0" & identifier))) )) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);" do (compound_statement "{\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  }" { (while_statement "while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" { (expression_statement "uVar2 = (uint)(DAT_0002c9d4 >> 0xd);" (assignment_expression "uVar2 = (uint)(DAT_0002c9d4 >> 0xd)" identifier = (call_expression "(uint)(DAT_0002c9d4 >> 0xd)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(DAT_0002c9d4 >> 0xd)" ( (binary_expression "DAT_0002c9d4 >> 0xd" identifier >> number_literal) )))) ;) (if_statement "if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" if (parenthesized_expression "(DAT_0002c9d4 >> 0xd == 7)" ( (binary_expression "DAT_0002c9d4 >> 0xd == 7" (binary_expression "DAT_0002c9d4 >> 0xd" identifier >> number_literal) == number_literal) )) (compound_statement "{\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" { (if_statement "if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }" if (parenthesized_expression "((DAT_0002c9d4 & 0x1000) == 0)" ( (binary_expression "(DAT_0002c9d4 & 0x1000) == 0" (parenthesized_expression "(DAT_0002c9d4 & 0x1000)" ( (binary_expression "DAT_0002c9d4 & 0x1000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          uVar2 = 7;\n        }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) }) (else_clause "else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }" else (compound_statement "{\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }\n        }" { (expression_statement "uVar5 = 0x1000;" (assignment_expression "uVar5 = 0x1000" identifier = number_literal) ;) (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) (do_statement "do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);" do (compound_statement "{\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          }" { (expression_statement "uVar5 = uVar5 >> 1;" (assignment_expression "uVar5 = uVar5 >> 1" identifier = (binary_expression "uVar5 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((DAT_0002c9d4 & uVar5) != 0)" ( (binary_expression "(DAT_0002c9d4 & uVar5) != 0" (parenthesized_expression "(DAT_0002c9d4 & uVar5)" ( (binary_expression "DAT_0002c9d4 & uVar5" identifier & identifier) )) != number_literal) )) ;) (if_statement "if (0x10 < (int)uVar2) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }" if (parenthesized_expression "(0x10 < (int)uVar2)" ( (binary_expression "0x10 < (int)uVar2" number_literal < (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            FUN_0001c790("Bad table\n");\n          }" { comment (expression_statement "FUN_0001c790("Bad table\n");" (call_expression "FUN_0001c790("Bad table\n")" identifier (argument_list "("Bad table\n")" ( (string_literal ""Bad table\n"" " string_content escape_sequence ") ))) ;) })) }))) })) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "(&DAT_0002cc00)[iVar8] = (char)uVar2;" (assignment_expression "(&DAT_0002cc00)[iVar8] = (char)uVar2" (subscript_expression "(&DAT_0002cc00)[iVar8]" (parenthesized_expression "(&DAT_0002cc00)" ( (pointer_expression "&DAT_0002cc00" & identifier) )) [ identifier ]) = (cast_expression "(char)uVar2" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (iVar7 == param_3) break;" if (parenthesized_expression "(iVar7 == param_3)" ( (binary_expression "iVar7 == param_3" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" identifier = identifier) ;) (if_statement "if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" if (parenthesized_expression "(iVar1 <= iVar7)" ( (binary_expression "iVar1 <= iVar7" identifier <= identifier) )) (compound_statement "{\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" { (if_statement "if (param_1 <= iVar7) goto LAB_0001aa82;" if (parenthesized_expression "(param_1 <= iVar7)" ( (binary_expression "param_1 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_0001aa82;" goto statement_identifier ;)) (goto_statement "goto LAB_0001aa68;" goto statement_identifier ;) })) })) (expression_statement "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;" (assignment_expression "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe" identifier = (binary_expression "(int)(uint)DAT_0002c9d4 >> 0xe" (cast_expression "(int)(uint)DAT_0002c9d4" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal)) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" { (expression_statement "puVar6 = &DAT_0002cc00 + iVar8;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar8" identifier = (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) ;) (do_statement "do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);" do (compound_statement "{\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      }" { (expression_statement "puVar6[1] = 0;" (assignment_expression "puVar6[1] = 0" (subscript_expression "puVar6[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != &DAT_0002cc00 + iVar8 + iVar3)" ( (binary_expression "puVar6 != &DAT_0002cc00 + iVar8 + iVar3" identifier != (binary_expression "&DAT_0002cc00 + iVar8 + iVar3" (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" & identifier) + identifier) + identifier)) )) ;) (expression_statement "iVar7 = iVar7 + iVar3;" (assignment_expression "iVar7 = iVar7 + iVar3" identifier = (binary_expression "iVar7 + iVar3" identifier + identifier)) ;) })) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 < iVar1)" ( (binary_expression "iVar7 < iVar1" identifier < identifier) )) ;) (labeled_statement "LAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;" statement_identifier : (expression_statement "puVar6 = &DAT_0002cc00 + iVar7;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar7" identifier = (binary_expression "&DAT_0002cc00 + iVar7" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) ;)) (do_statement "do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);" do (compound_statement "{\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != &DAT_0002cc00 + param_1)" ( (binary_expression "puVar6 != &DAT_0002cc00 + param_1" identifier != (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) )) ;) (labeled_statement "LAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);" statement_identifier : (expression_statement "FUN_0001a6d0(&DAT_0002c9e0);" (call_expression "FUN_0001a6d0(&DAT_0002c9e0)" identifier (argument_list "(&DAT_0002c9e0)" ( (pointer_expression "&DAT_0002c9e0" & identifier) ))) ;)) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 read_pt_len(int nn,int nbit,int i_special)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  byte bVar5;\n  uint uVar6;\n  uint uVar7;\n  uch *puVar8;\n  int iVar9;\n  uch *in_stack_ffffffc8;\n  int in_stack_ffffffcc;\n  ush *puVar10;\n  \n  bVar5 = 0x10 - (char)nbit;\n  iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f);\n  fillbuf(nbit);\n  iVar9 = 0;\n  if (iVar1 == 0) {\n    uVar7 = (uint)bitbuf;\n    fillbuf(nbit);\n    puVar8 = pt_len;\n    do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);\n    puVar10 = pt_table;\n    do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);\n    return;\n  }\n  do {\n    while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar4 = (int)(uint)bitbuf >> 0xe;\n    puVar10 = (ush *)0x1ab0a;\n    fillbuf(2);\n    if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }\n    iVar9 = iVar2;\n  } while (iVar2 < iVar1);\nLAB_0001aa68:\n  puVar8 = pt_len + iVar2;\n  do {\n    *puVar8 = '\0';\n    puVar8 = puVar8 + 1;\n  } while (puVar8 != pt_len + nn);\nLAB_0001aa82:\n  make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);\n  return;\n}\n\n" comment (function_definition "void __regparm3 read_pt_len(int nn,int nbit,int i_special)\n\n{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  byte bVar5;\n  uint uVar6;\n  uint uVar7;\n  uch *puVar8;\n  int iVar9;\n  uch *in_stack_ffffffc8;\n  int in_stack_ffffffcc;\n  ush *puVar10;\n  \n  bVar5 = 0x10 - (char)nbit;\n  iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f);\n  fillbuf(nbit);\n  iVar9 = 0;\n  if (iVar1 == 0) {\n    uVar7 = (uint)bitbuf;\n    fillbuf(nbit);\n    puVar8 = pt_len;\n    do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);\n    puVar10 = pt_table;\n    do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);\n    return;\n  }\n  do {\n    while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar4 = (int)(uint)bitbuf >> 0xe;\n    puVar10 = (ush *)0x1ab0a;\n    fillbuf(2);\n    if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }\n    iVar9 = iVar2;\n  } while (iVar2 < iVar1);\nLAB_0001aa68:\n  puVar8 = pt_len + iVar2;\n  do {\n    *puVar8 = '\0';\n    puVar8 = puVar8 + 1;\n  } while (puVar8 != pt_len + nn);\nLAB_0001aa82:\n  make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "read_pt_len(int nn,int nbit,int i_special)" identifier (parameter_list "(int nn,int nbit,int i_special)" ( (parameter_declaration "int nn" primitive_type identifier) , (parameter_declaration "int nbit" primitive_type identifier) , (parameter_declaration "int i_special" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint uVar3;\n  int iVar4;\n  byte bVar5;\n  uint uVar6;\n  uint uVar7;\n  uch *puVar8;\n  int iVar9;\n  uch *in_stack_ffffffc8;\n  int in_stack_ffffffcc;\n  ush *puVar10;\n  \n  bVar5 = 0x10 - (char)nbit;\n  iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f);\n  fillbuf(nbit);\n  iVar9 = 0;\n  if (iVar1 == 0) {\n    uVar7 = (uint)bitbuf;\n    fillbuf(nbit);\n    puVar8 = pt_len;\n    do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);\n    puVar10 = pt_table;\n    do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);\n    return;\n  }\n  do {\n    while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar4 = (int)(uint)bitbuf >> 0xe;\n    puVar10 = (ush *)0x1ab0a;\n    fillbuf(2);\n    if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }\n    iVar9 = iVar2;\n  } while (iVar2 < iVar1);\nLAB_0001aa68:\n  puVar8 = pt_len + iVar2;\n  do {\n    *puVar8 = '\0';\n    puVar8 = puVar8 + 1;\n  } while (puVar8 != pt_len + nn);\nLAB_0001aa82:\n  make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uch *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uch *in_stack_ffffffc8;" type_identifier (pointer_declarator "*in_stack_ffffffc8" * identifier) ;) (declaration "int in_stack_ffffffcc;" primitive_type identifier ;) (declaration "ush *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (expression_statement "bVar5 = 0x10 - (char)nbit;" (assignment_expression "bVar5 = 0x10 - (char)nbit" identifier = (binary_expression "0x10 - (char)nbit" number_literal - (cast_expression "(char)nbit" ( (type_descriptor "char" primitive_type) ) identifier))) ;) (expression_statement "iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f);" (assignment_expression "iVar1 = (int)(uint)bitbuf >> (bVar5 & 0x1f)" identifier = (binary_expression "(int)(uint)bitbuf >> (bVar5 & 0x1f)" (cast_expression "(int)(uint)bitbuf" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)bitbuf" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(bVar5 & 0x1f)" ( (binary_expression "bVar5 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "fillbuf(nbit);" (call_expression "fillbuf(nbit)" identifier (argument_list "(nbit)" ( identifier ))) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (if_statement "if (iVar1 == 0) {\n    uVar7 = (uint)bitbuf;\n    fillbuf(nbit);\n    puVar8 = pt_len;\n    do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);\n    puVar10 = pt_table;\n    do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);\n    return;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar7 = (uint)bitbuf;\n    fillbuf(nbit);\n    puVar8 = pt_len;\n    do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);\n    puVar10 = pt_table;\n    do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);\n    return;\n  }" { (expression_statement "uVar7 = (uint)bitbuf;" (assignment_expression "uVar7 = (uint)bitbuf" identifier = (cast_expression "(uint)bitbuf" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "fillbuf(nbit);" (call_expression "fillbuf(nbit)" identifier (argument_list "(nbit)" ( identifier ))) ;) (expression_statement "puVar8 = pt_len;" (assignment_expression "puVar8 = pt_len" identifier = identifier) ;) (do_statement "do {\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    } while (pt_len + nn != puVar8);" do (compound_statement "{\n      *puVar8 = '\0';\n      puVar8 = puVar8 + 1;\n    }" { (expression_statement "*puVar8 = '\0';" (assignment_expression "*puVar8 = '\0'" (pointer_expression "*puVar8" * identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pt_len + nn != puVar8)" ( (binary_expression "pt_len + nn != puVar8" (binary_expression "pt_len + nn" identifier + identifier) != identifier) )) ;) (expression_statement "puVar10 = pt_table;" (assignment_expression "puVar10 = pt_table" identifier = identifier) ;) (do_statement "do {\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    } while ((uint *)puVar10 != &blocksize);" do (compound_statement "{\n      *puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));\n      puVar10 = (ush *)((int)puVar10 + 2);\n    }" { (expression_statement "*puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f));" (assignment_expression "*puVar10 = (ush)((int)uVar7 >> (bVar5 & 0x1f))" (pointer_expression "*puVar10" * identifier) = (call_expression "(ush)((int)uVar7 >> (bVar5 & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)uVar7 >> (bVar5 & 0x1f))" ( (binary_expression "(int)uVar7 >> (bVar5 & 0x1f)" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(bVar5 & 0x1f)" ( (binary_expression "bVar5 & 0x1f" identifier & number_literal) ))) )))) ;) (expression_statement "puVar10 = (ush *)((int)puVar10 + 2);" (assignment_expression "puVar10 = (ush *)((int)puVar10 + 2)" identifier = (cast_expression "(ush *)((int)puVar10 + 2)" ( (type_descriptor "ush *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar10 + 2)" ( (binary_expression "(int)puVar10 + 2" (cast_expression "(int)puVar10" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "((uint *)puVar10 != &blocksize)" ( (binary_expression "(uint *)puVar10 != &blocksize" (cast_expression "(uint *)puVar10" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != (pointer_expression "&blocksize" & identifier)) )) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar4 = (int)(uint)bitbuf >> 0xe;\n    puVar10 = (ush *)0x1ab0a;\n    fillbuf(2);\n    if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }\n    iVar9 = iVar2;\n  } while (iVar2 < iVar1);" do (compound_statement "{\n    while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar4 = (int)(uint)bitbuf >> 0xe;\n    puVar10 = (ush *)0x1ab0a;\n    fillbuf(2);\n    if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }\n    iVar9 = iVar2;\n  }" { (while_statement "while( true ) {\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar2 = 3;\n      uVar7 = (uint)(bitbuf >> 0xd);\n      if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }\n      puVar10 = (ush *)0x1aa37;\n      fillbuf(iVar2);\n      iVar2 = iVar9 + 1;\n      pt_len[iVar9] = (uch)uVar7;\n      if (iVar2 == i_special) break;\n      iVar9 = iVar2;\n      if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" { (expression_statement "iVar2 = 3;" (assignment_expression "iVar2 = 3" identifier = number_literal) ;) (expression_statement "uVar7 = (uint)(bitbuf >> 0xd);" (assignment_expression "uVar7 = (uint)(bitbuf >> 0xd)" identifier = (call_expression "(uint)(bitbuf >> 0xd)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(bitbuf >> 0xd)" ( (binary_expression "bitbuf >> 0xd" identifier >> number_literal) )))) ;) (if_statement "if (bitbuf >> 0xd == 7) {\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }" if (parenthesized_expression "(bitbuf >> 0xd == 7)" ( (binary_expression "bitbuf >> 0xd == 7" (binary_expression "bitbuf >> 0xd" identifier >> number_literal) == number_literal) )) (compound_statement "{\n        if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }\n      }" { (if_statement "if ((bitbuf & 0x1000) == 0) {\n          uVar7 = 7;\n          iVar2 = 4;\n        }\n        else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }" if (parenthesized_expression "((bitbuf & 0x1000) == 0)" ( (binary_expression "(bitbuf & 0x1000) == 0" (parenthesized_expression "(bitbuf & 0x1000)" ( (binary_expression "bitbuf & 0x1000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          uVar7 = 7;\n          iVar2 = 4;\n        }" { (expression_statement "uVar7 = 7;" (assignment_expression "uVar7 = 7" identifier = number_literal) ;) (expression_statement "iVar2 = 4;" (assignment_expression "iVar2 = 4" identifier = number_literal) ;) }) (else_clause "else {\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }" else (compound_statement "{\n          uVar6 = 0x1000;\n          uVar7 = 7;\n          do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);\n          if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }\n          iVar2 = uVar3 - 2;\n        }" { (expression_statement "uVar6 = 0x1000;" (assignment_expression "uVar6 = 0x1000" identifier = number_literal) ;) (expression_statement "uVar7 = 7;" (assignment_expression "uVar7 = 7" identifier = number_literal) ;) (do_statement "do {\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          } while ((bitbuf & uVar6) != 0);" do (compound_statement "{\n            uVar3 = uVar7;\n            uVar6 = uVar6 >> 1;\n            uVar7 = uVar3 + 1;\n          }" { (expression_statement "uVar3 = uVar7;" (assignment_expression "uVar3 = uVar7" identifier = identifier) ;) (expression_statement "uVar6 = uVar6 >> 1;" (assignment_expression "uVar6 = uVar6 >> 1" identifier = (binary_expression "uVar6 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar7 = uVar3 + 1;" (assignment_expression "uVar7 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((bitbuf & uVar6) != 0)" ( (binary_expression "(bitbuf & uVar6) != 0" (parenthesized_expression "(bitbuf & uVar6)" ( (binary_expression "bitbuf & uVar6" identifier & identifier) )) != number_literal) )) ;) (if_statement "if (0x10 < (int)uVar7) {\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }" if (parenthesized_expression "(0x10 < (int)uVar7)" ( (binary_expression "0x10 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            gzip_error("Bad table\n");\n          }" { comment (expression_statement "gzip_error("Bad table\n");" (call_expression "gzip_error("Bad table\n")" identifier (argument_list "("Bad table\n")" ( (string_literal ""Bad table\n"" " string_content escape_sequence ") ))) ;) })) (expression_statement "iVar2 = uVar3 - 2;" (assignment_expression "iVar2 = uVar3 - 2" identifier = (binary_expression "uVar3 - 2" identifier - number_literal)) ;) }))) })) (expression_statement "puVar10 = (ush *)0x1aa37;" (assignment_expression "puVar10 = (ush *)0x1aa37" identifier = (cast_expression "(ush *)0x1aa37" ( (type_descriptor "ush *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "fillbuf(iVar2);" (call_expression "fillbuf(iVar2)" identifier (argument_list "(iVar2)" ( identifier ))) ;) (expression_statement "iVar2 = iVar9 + 1;" (assignment_expression "iVar2 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (expression_statement "pt_len[iVar9] = (uch)uVar7;" (assignment_expression "pt_len[iVar9] = (uch)uVar7" (subscript_expression "pt_len[iVar9]" identifier [ identifier ]) = (cast_expression "(uch)uVar7" ( (type_descriptor "uch" type_identifier) ) identifier)) ;) (if_statement "if (iVar2 == i_special) break;" if (parenthesized_expression "(iVar2 == i_special)" ( (binary_expression "iVar2 == i_special" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar9 = iVar2;" (assignment_expression "iVar9 = iVar2" identifier = identifier) ;) (if_statement "if (iVar1 <= iVar2) {\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" if (parenthesized_expression "(iVar1 <= iVar2)" ( (binary_expression "iVar1 <= iVar2" identifier <= identifier) )) (compound_statement "{\n        if (nn <= iVar2) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" { (if_statement "if (nn <= iVar2) goto LAB_0001aa82;" if (parenthesized_expression "(nn <= iVar2)" ( (binary_expression "nn <= iVar2" identifier <= identifier) )) (goto_statement "goto LAB_0001aa82;" goto statement_identifier ;)) (goto_statement "goto LAB_0001aa68;" goto statement_identifier ;) })) })) (expression_statement "iVar4 = (int)(uint)bitbuf >> 0xe;" (assignment_expression "iVar4 = (int)(uint)bitbuf >> 0xe" identifier = (binary_expression "(int)(uint)bitbuf >> 0xe" (cast_expression "(int)(uint)bitbuf" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)bitbuf" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal)) ;) (expression_statement "puVar10 = (ush *)0x1ab0a;" (assignment_expression "puVar10 = (ush *)0x1ab0a" identifier = (cast_expression "(ush *)0x1ab0a" ( (type_descriptor "ush *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "fillbuf(2);" (call_expression "fillbuf(2)" identifier (argument_list "(2)" ( number_literal ))) ;) (if_statement "if (iVar4 != 0) {\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      puVar8 = pt_len + iVar9;\n      do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);\n      iVar2 = iVar2 + iVar4;\n    }" { (expression_statement "puVar8 = pt_len + iVar9;" (assignment_expression "puVar8 = pt_len + iVar9" identifier = (binary_expression "pt_len + iVar9" identifier + identifier)) ;) (do_statement "do {\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      } while (puVar8 != pt_len + iVar9 + iVar4);" do (compound_statement "{\n        puVar8[1] = '\0';\n        puVar8 = puVar8 + 1;\n      }" { (expression_statement "puVar8[1] = '\0';" (assignment_expression "puVar8[1] = '\0'" (subscript_expression "puVar8[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 != pt_len + iVar9 + iVar4)" ( (binary_expression "puVar8 != pt_len + iVar9 + iVar4" identifier != (binary_expression "pt_len + iVar9 + iVar4" (binary_expression "pt_len + iVar9" identifier + identifier) + identifier)) )) ;) (expression_statement "iVar2 = iVar2 + iVar4;" (assignment_expression "iVar2 = iVar2 + iVar4" identifier = (binary_expression "iVar2 + iVar4" identifier + identifier)) ;) })) (expression_statement "iVar9 = iVar2;" (assignment_expression "iVar9 = iVar2" identifier = identifier) ;) }) while (parenthesized_expression "(iVar2 < iVar1)" ( (binary_expression "iVar2 < iVar1" identifier < identifier) )) ;) (labeled_statement "LAB_0001aa68:\n  puVar8 = pt_len + iVar2;" statement_identifier : (expression_statement "puVar8 = pt_len + iVar2;" (assignment_expression "puVar8 = pt_len + iVar2" identifier = (binary_expression "pt_len + iVar2" identifier + identifier)) ;)) (do_statement "do {\n    *puVar8 = '\0';\n    puVar8 = puVar8 + 1;\n  } while (puVar8 != pt_len + nn);" do (compound_statement "{\n    *puVar8 = '\0';\n    puVar8 = puVar8 + 1;\n  }" { (expression_statement "*puVar8 = '\0';" (assignment_expression "*puVar8 = '\0'" (pointer_expression "*puVar8" * identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 != pt_len + nn)" ( (binary_expression "puVar8 != pt_len + nn" identifier != (binary_expression "pt_len + nn" identifier + identifier)) )) ;) (labeled_statement "LAB_0001aa82:\n  make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);" statement_identifier : (expression_statement "make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);" (call_expression "make_table(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10)" identifier (argument_list "(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10)" ( number_literal , identifier , identifier , identifier ))) ;)) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0001a9d0(int param_1,char param_2,int param_3)" identifier (parameter_list "(int param_1,char param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "char param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined2 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined1 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);" (assignment_expression "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" identifier = (binary_expression "(int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)(uint)DAT_0002c9d4" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - param_2 & 0x1f)" ( (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" number_literal - identifier) & number_literal) )))) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" { (expression_statement "uVar2 = (uint)DAT_0002c9d4;" (assignment_expression "uVar2 = (uint)DAT_0002c9d4" identifier = (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "puVar6 = &DAT_0002cc00;" (assignment_expression "puVar6 = &DAT_0002cc00" identifier = (pointer_expression "&DAT_0002cc00" & identifier)) ;) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);" do (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(&DAT_0002cc00 + param_1 != puVar6)" ( (binary_expression "&DAT_0002cc00 + param_1 != puVar6" (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" & identifier) + identifier) != identifier) )) ;) (expression_statement "puVar4 = &DAT_0002c9e0;" (assignment_expression "puVar4 = &DAT_0002c9e0" identifier = (pointer_expression "&DAT_0002c9e0" & identifier)) ;) (do_statement "do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);" do (compound_statement "{\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    }" { (expression_statement "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));" (assignment_expression "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" (pointer_expression "*puVar4" * identifier) = (cast_expression "(short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar2 >> (0x10U - param_2 & 0x1f))" ( (binary_expression "(int)uVar2 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - param_2 & 0x1f)" ( (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" number_literal - identifier) & number_literal) ))) )))) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar4 != (undefined2 *)&DAT_0002cbe0)" ( (binary_expression "puVar4 != (undefined2 *)&DAT_0002cbe0" identifier != (cast_expression "(undefined2 *)&DAT_0002cbe0" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&DAT_0002cbe0" & identifier))) )) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);" do (compound_statement "{\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  }" { (while_statement "while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" { (expression_statement "uVar2 = (uint)(DAT_0002c9d4 >> 0xd);" (assignment_expression "uVar2 = (uint)(DAT_0002c9d4 >> 0xd)" identifier = (call_expression "(uint)(DAT_0002c9d4 >> 0xd)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(DAT_0002c9d4 >> 0xd)" ( (binary_expression "DAT_0002c9d4 >> 0xd" identifier >> number_literal) )))) ;) (if_statement "if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" if (parenthesized_expression "(DAT_0002c9d4 >> 0xd == 7)" ( (binary_expression "DAT_0002c9d4 >> 0xd == 7" (binary_expression "DAT_0002c9d4 >> 0xd" identifier >> number_literal) == number_literal) )) (compound_statement "{\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" { (if_statement "if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" if (parenthesized_expression "((DAT_0002c9d4 & 0x1000) == 0)" ( (binary_expression "(DAT_0002c9d4 & 0x1000) == 0" (parenthesized_expression "(DAT_0002c9d4 & 0x1000)" ( (binary_expression "DAT_0002c9d4 & 0x1000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n          uVar2 = 7;\n        }" { (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) }) (else_clause "else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" else (compound_statement "{\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" { (expression_statement "uVar5 = 0x1000;" (assignment_expression "uVar5 = 0x1000" identifier = number_literal) ;) (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" identifier = number_literal) ;) (do_statement "do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);" do (compound_statement "{\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          }" { (expression_statement "uVar5 = uVar5 >> 1;" (assignment_expression "uVar5 = uVar5 >> 1" identifier = (binary_expression "uVar5 >> 1" identifier >> number_literal)) ;) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" identifier = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((DAT_0002c9d4 & uVar5) != 0)" ( (binary_expression "(DAT_0002c9d4 & uVar5) != 0" (parenthesized_expression "(DAT_0002c9d4 & uVar5)" ( (binary_expression "DAT_0002c9d4 & uVar5" identifier & identifier) )) != number_literal) )) ;) (if_statement "if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }" if (parenthesized_expression "(0x10 < (int)uVar2)" ( (binary_expression "0x10 < (int)uVar2" number_literal < (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                    \n            FUN_0001c790("Bad table\n");\n          }" { (expression_statement "FUN_0001c790("Bad table\n");" (call_expression "FUN_0001c790("Bad table\n")" identifier (argument_list "("Bad table\n")" ( (string_literal ""Bad table\n"" " string_content escape_sequence ") ))) ;) })) }))) })) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "(&DAT_0002cc00)[iVar8] = (char)uVar2;" (assignment_expression "(&DAT_0002cc00)[iVar8] = (char)uVar2" (subscript_expression "(&DAT_0002cc00)[iVar8]" (parenthesized_expression "(&DAT_0002cc00)" ( (pointer_expression "&DAT_0002cc00" & identifier) )) [ identifier ]) = (cast_expression "(char)uVar2" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (iVar7 == param_3) break;" if (parenthesized_expression "(iVar7 == param_3)" ( (binary_expression "iVar7 == param_3" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" identifier = identifier) ;) (if_statement "if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" if (parenthesized_expression "(iVar1 <= iVar7)" ( (binary_expression "iVar1 <= iVar7" identifier <= identifier) )) (compound_statement "{\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" { (if_statement "if (param_1 <= iVar7) goto LAB_0001aa82;" if (parenthesized_expression "(param_1 <= iVar7)" ( (binary_expression "param_1 <= iVar7" identifier <= identifier) )) (goto_statement "goto LAB_0001aa82;" goto statement_identifier ;)) (goto_statement "goto LAB_0001aa68;" goto statement_identifier ;) })) })) (expression_statement "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;" (assignment_expression "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe" identifier = (binary_expression "(int)(uint)DAT_0002c9d4 >> 0xe" (cast_expression "(int)(uint)DAT_0002c9d4" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)DAT_0002c9d4" ( (type_descriptor "uint" type_identifier) ) identifier)) >> number_literal)) ;) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" { (expression_statement "puVar6 = &DAT_0002cc00 + iVar8;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar8" identifier = (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) ;) (do_statement "do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);" do (compound_statement "{\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      }" { (expression_statement "puVar6[1] = 0;" (assignment_expression "puVar6[1] = 0" (subscript_expression "puVar6[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != &DAT_0002cc00 + iVar8 + iVar3)" ( (binary_expression "puVar6 != &DAT_0002cc00 + iVar8 + iVar3" identifier != (binary_expression "&DAT_0002cc00 + iVar8 + iVar3" (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" & identifier) + identifier) + identifier)) )) ;) (expression_statement "iVar7 = iVar7 + iVar3;" (assignment_expression "iVar7 = iVar7 + iVar3" identifier = (binary_expression "iVar7 + iVar3" identifier + identifier)) ;) })) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 < iVar1)" ( (binary_expression "iVar7 < iVar1" identifier < identifier) )) ;) (labeled_statement "LAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;" statement_identifier : (expression_statement "puVar6 = &DAT_0002cc00 + iVar7;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar7" identifier = (binary_expression "&DAT_0002cc00 + iVar7" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) ;)) (do_statement "do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);" do (compound_statement "{\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != &DAT_0002cc00 + param_1)" ( (binary_expression "puVar6 != &DAT_0002cc00 + param_1" identifier != (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" & identifier) + identifier)) )) ;) (labeled_statement "LAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);" statement_identifier : (expression_statement "FUN_0001a6d0(&DAT_0002c9e0);" (call_expression "FUN_0001a6d0(&DAT_0002c9e0)" identifier (argument_list "(&DAT_0002c9e0)" ( (pointer_expression "&DAT_0002c9e0" & identifier) ))) ;)) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression & IDENT) + IDENT) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression & IDENT))) )) ;) (return_statement return ;) })) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_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 = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & IDENT) )) != LIT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence ") ))) ;) })) }))) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression & IDENT) + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression (binary_expression (pointer_expression & IDENT) + IDENT) + IDENT)) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression & IDENT) + IDENT)) ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression (pointer_expression & IDENT) + IDENT)) )) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) ))) ;)) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_0001a9d0(int param_1,char param_2,int param_3)\n\n{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0001a9d0(int param_1,char param_2,int param_3)" (identifier "FUN_0001a9d0") (parameter_list "(int param_1,char param_2,int param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "char param_2" (primitive_type "char") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  int iVar1;\n  uint uVar2;\n  int iVar3;\n  undefined2 *puVar4;\n  uint uVar5;\n  undefined1 *puVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);\n  FUN_0001a5d0();\n  iVar8 = 0;\n  if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }\n  do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);\nLAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;\n  do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);\nLAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined2 *puVar4;" (type_identifier "undefined2") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "undefined1 *puVar6;" (type_identifier "undefined1") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (expression_statement "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);" (assignment_expression "iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" (identifier "iVar1") (= "=") (binary_expression "(int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)(uint)DAT_0002c9d4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)DAT_0002c9d4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "DAT_0002c9d4"))) (>> ">>") (parenthesized_expression "(0x10U - param_2 & 0x1f)" (( "(") (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" (number_literal "0x10U") (- "-") (identifier "param_2")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" (identifier "FUN_0001a5d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar1 == 0) {\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar2 = (uint)DAT_0002c9d4;\n    FUN_0001a5d0();\n    puVar6 = &DAT_0002cc00;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);\n    puVar4 = &DAT_0002c9e0;\n    do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);\n    return;\n  }" ({ "{") (expression_statement "uVar2 = (uint)DAT_0002c9d4;" (assignment_expression "uVar2 = (uint)DAT_0002c9d4" (identifier "uVar2") (= "=") (cast_expression "(uint)DAT_0002c9d4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "DAT_0002c9d4"))) (; ";")) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" (identifier "FUN_0001a5d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar6 = &DAT_0002cc00;" (assignment_expression "puVar6 = &DAT_0002cc00" (identifier "puVar6") (= "=") (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00"))) (; ";")) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (&DAT_0002cc00 + param_1 != puVar6);" (do "do") (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" ({ "{") (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(&DAT_0002cc00 + param_1 != puVar6)" (( "(") (binary_expression "&DAT_0002cc00 + param_1 != puVar6" (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) (+ "+") (identifier "param_1")) (!= "!=") (identifier "puVar6")) () ")")) (; ";")) (expression_statement "puVar4 = &DAT_0002c9e0;" (assignment_expression "puVar4 = &DAT_0002c9e0" (identifier "puVar4") (= "=") (pointer_expression "&DAT_0002c9e0" (& "&") (identifier "DAT_0002c9e0"))) (; ";")) (do_statement "do {\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);" (do "do") (compound_statement "{\n      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));\n      puVar4 = puVar4 + 1;\n    }" ({ "{") (expression_statement "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));" (assignment_expression "*puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (cast_expression "(short)((int)uVar2 >> (0x10U - param_2 & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)uVar2 >> (0x10U - param_2 & 0x1f))" (( "(") (binary_expression "(int)uVar2 >> (0x10U - param_2 & 0x1f)" (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) (>> ">>") (parenthesized_expression "(0x10U - param_2 & 0x1f)" (( "(") (binary_expression "0x10U - param_2 & 0x1f" (binary_expression "0x10U - param_2" (number_literal "0x10U") (- "-") (identifier "param_2")) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar4 != (undefined2 *)&DAT_0002cbe0)" (( "(") (binary_expression "puVar4 != (undefined2 *)&DAT_0002cbe0" (identifier "puVar4") (!= "!=") (cast_expression "(undefined2 *)&DAT_0002cbe0" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "&DAT_0002cbe0" (& "&") (identifier "DAT_0002cbe0")))) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (do_statement "do {\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  } while (iVar7 < iVar1);" (do "do") (compound_statement "{\n    while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }\n    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;\n    FUN_0001a5d0();\n    if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }\n    iVar8 = iVar7;\n  }" ({ "{") (while_statement "while( true ) {\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);\n      if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }\n      FUN_0001a5d0();\n      iVar7 = iVar8 + 1;\n      (&DAT_0002cc00)[iVar8] = (char)uVar2;\n      if (iVar7 == param_3) break;\n      iVar8 = iVar7;\n      if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }\n    }" ({ "{") (expression_statement "uVar2 = (uint)(DAT_0002c9d4 >> 0xd);" (assignment_expression "uVar2 = (uint)(DAT_0002c9d4 >> 0xd)" (identifier "uVar2") (= "=") (call_expression "(uint)(DAT_0002c9d4 >> 0xd)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(DAT_0002c9d4 >> 0xd)" (( "(") (binary_expression "DAT_0002c9d4 >> 0xd" (identifier "DAT_0002c9d4") (>> ">>") (number_literal "0xd")) () ")")))) (; ";")) (if_statement "if (DAT_0002c9d4 >> 0xd == 7) {\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" (if "if") (parenthesized_expression "(DAT_0002c9d4 >> 0xd == 7)" (( "(") (binary_expression "DAT_0002c9d4 >> 0xd == 7" (binary_expression "DAT_0002c9d4 >> 0xd" (identifier "DAT_0002c9d4") (>> ">>") (number_literal "0xd")) (== "==") (number_literal "7")) () ")")) (compound_statement "{\n        if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }\n      }" ({ "{") (if_statement "if ((DAT_0002c9d4 & 0x1000) == 0) {\n          uVar2 = 7;\n        }\n        else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" (if "if") (parenthesized_expression "((DAT_0002c9d4 & 0x1000) == 0)" (( "(") (binary_expression "(DAT_0002c9d4 & 0x1000) == 0" (parenthesized_expression "(DAT_0002c9d4 & 0x1000)" (( "(") (binary_expression "DAT_0002c9d4 & 0x1000" (identifier "DAT_0002c9d4") (& "&") (number_literal "0x1000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar2 = 7;\n        }" ({ "{") (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" (identifier "uVar2") (= "=") (number_literal "7")) (; ";")) (} "}")) (else_clause "else {\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" (else "else") (compound_statement "{\n          uVar5 = 0x1000;\n          uVar2 = 7;\n          do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);\n          if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }\n        }" ({ "{") (expression_statement "uVar5 = 0x1000;" (assignment_expression "uVar5 = 0x1000" (identifier "uVar5") (= "=") (number_literal "0x1000")) (; ";")) (expression_statement "uVar2 = 7;" (assignment_expression "uVar2 = 7" (identifier "uVar2") (= "=") (number_literal "7")) (; ";")) (do_statement "do {\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          } while ((DAT_0002c9d4 & uVar5) != 0);" (do "do") (compound_statement "{\n            uVar5 = uVar5 >> 1;\n            uVar2 = uVar2 + 1;\n          }" ({ "{") (expression_statement "uVar5 = uVar5 >> 1;" (assignment_expression "uVar5 = uVar5 >> 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 >> 1" (identifier "uVar5") (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "uVar2 = uVar2 + 1;" (assignment_expression "uVar2 = uVar2 + 1" (identifier "uVar2") (= "=") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((DAT_0002c9d4 & uVar5) != 0)" (( "(") (binary_expression "(DAT_0002c9d4 & uVar5) != 0" (parenthesized_expression "(DAT_0002c9d4 & uVar5)" (( "(") (binary_expression "DAT_0002c9d4 & uVar5" (identifier "DAT_0002c9d4") (& "&") (identifier "uVar5")) () ")")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (if_statement "if (0x10 < (int)uVar2) {\n                    \n            FUN_0001c790("Bad table\n");\n          }" (if "if") (parenthesized_expression "(0x10 < (int)uVar2)" (( "(") (binary_expression "0x10 < (int)uVar2" (number_literal "0x10") (< "<") (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2"))) () ")")) (compound_statement "{\n                    \n            FUN_0001c790("Bad table\n");\n          }" ({ "{") (expression_statement "FUN_0001c790("Bad table\n");" (call_expression "FUN_0001c790("Bad table\n")" (identifier "FUN_0001c790") (argument_list "("Bad table\n")" (( "(") (string_literal ""Bad table\n"" (" """) (string_content "Bad table") (escape_sequence "\n") (" """)) () ")"))) (; ";")) (} "}"))) (} "}")))) (} "}"))) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" (identifier "FUN_0001a5d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar7 = iVar8 + 1;" (assignment_expression "iVar7 = iVar8 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "(&DAT_0002cc00)[iVar8] = (char)uVar2;" (assignment_expression "(&DAT_0002cc00)[iVar8] = (char)uVar2" (subscript_expression "(&DAT_0002cc00)[iVar8]" (parenthesized_expression "(&DAT_0002cc00)" (( "(") (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) () ")")) ([ "[") (identifier "iVar8") (] "]")) (= "=") (cast_expression "(char)uVar2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar2"))) (; ";")) (if_statement "if (iVar7 == param_3) break;" (if "if") (parenthesized_expression "(iVar7 == param_3)" (( "(") (binary_expression "iVar7 == param_3" (identifier "iVar7") (== "==") (identifier "param_3")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" (identifier "iVar8") (= "=") (identifier "iVar7")) (; ";")) (if_statement "if (iVar1 <= iVar7) {\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" (if "if") (parenthesized_expression "(iVar1 <= iVar7)" (( "(") (binary_expression "iVar1 <= iVar7" (identifier "iVar1") (<= "<=") (identifier "iVar7")) () ")")) (compound_statement "{\n        if (param_1 <= iVar7) goto LAB_0001aa82;\n        goto LAB_0001aa68;\n      }" ({ "{") (if_statement "if (param_1 <= iVar7) goto LAB_0001aa82;" (if "if") (parenthesized_expression "(param_1 <= iVar7)" (( "(") (binary_expression "param_1 <= iVar7" (identifier "param_1") (<= "<=") (identifier "iVar7")) () ")")) (goto_statement "goto LAB_0001aa82;" (goto "goto") (statement_identifier "LAB_0001aa82") (; ";"))) (goto_statement "goto LAB_0001aa68;" (goto "goto") (statement_identifier "LAB_0001aa68") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;" (assignment_expression "iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe" (identifier "iVar3") (= "=") (binary_expression "(int)(uint)DAT_0002c9d4 >> 0xe" (cast_expression "(int)(uint)DAT_0002c9d4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)DAT_0002c9d4" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "DAT_0002c9d4"))) (>> ">>") (number_literal "0xe"))) (; ";")) (expression_statement "FUN_0001a5d0();" (call_expression "FUN_0001a5d0()" (identifier "FUN_0001a5d0") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (iVar3 != 0) {\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      puVar6 = &DAT_0002cc00 + iVar8;\n      do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);\n      iVar7 = iVar7 + iVar3;\n    }" ({ "{") (expression_statement "puVar6 = &DAT_0002cc00 + iVar8;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar8" (identifier "puVar6") (= "=") (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) (+ "+") (identifier "iVar8"))) (; ";")) (do_statement "do {\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);" (do "do") (compound_statement "{\n        puVar6[1] = 0;\n        puVar6 = puVar6 + 1;\n      }" ({ "{") (expression_statement "puVar6[1] = 0;" (assignment_expression "puVar6[1] = 0" (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar6 != &DAT_0002cc00 + iVar8 + iVar3)" (( "(") (binary_expression "puVar6 != &DAT_0002cc00 + iVar8 + iVar3" (identifier "puVar6") (!= "!=") (binary_expression "&DAT_0002cc00 + iVar8 + iVar3" (binary_expression "&DAT_0002cc00 + iVar8" (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) (+ "+") (identifier "iVar8")) (+ "+") (identifier "iVar3"))) () ")")) (; ";")) (expression_statement "iVar7 = iVar7 + iVar3;" (assignment_expression "iVar7 = iVar7 + iVar3" (identifier "iVar7") (= "=") (binary_expression "iVar7 + iVar3" (identifier "iVar7") (+ "+") (identifier "iVar3"))) (; ";")) (} "}"))) (expression_statement "iVar8 = iVar7;" (assignment_expression "iVar8 = iVar7" (identifier "iVar8") (= "=") (identifier "iVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 < iVar1)" (( "(") (binary_expression "iVar7 < iVar1" (identifier "iVar7") (< "<") (identifier "iVar1")) () ")")) (; ";")) (labeled_statement "LAB_0001aa68:\n  puVar6 = &DAT_0002cc00 + iVar7;" (statement_identifier "LAB_0001aa68") (: ":") (expression_statement "puVar6 = &DAT_0002cc00 + iVar7;" (assignment_expression "puVar6 = &DAT_0002cc00 + iVar7" (identifier "puVar6") (= "=") (binary_expression "&DAT_0002cc00 + iVar7" (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) (+ "+") (identifier "iVar7"))) (; ";"))) (do_statement "do {\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  } while (puVar6 != &DAT_0002cc00 + param_1);" (do "do") (compound_statement "{\n    *puVar6 = 0;\n    puVar6 = puVar6 + 1;\n  }" ({ "{") (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar6 != &DAT_0002cc00 + param_1)" (( "(") (binary_expression "puVar6 != &DAT_0002cc00 + param_1" (identifier "puVar6") (!= "!=") (binary_expression "&DAT_0002cc00 + param_1" (pointer_expression "&DAT_0002cc00" (& "&") (identifier "DAT_0002cc00")) (+ "+") (identifier "param_1"))) () ")")) (; ";")) (labeled_statement "LAB_0001aa82:\n  FUN_0001a6d0(&DAT_0002c9e0);" (statement_identifier "LAB_0001aa82") (: ":") (expression_statement "FUN_0001a6d0(&DAT_0002c9e0);" (call_expression "FUN_0001a6d0(&DAT_0002c9e0)" (identifier "FUN_0001a6d0") (argument_list "(&DAT_0002c9e0)" (( "(") (pointer_expression "&DAT_0002c9e0" (& "&") (identifier "DAT_0002c9e0")) () ")"))) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 function_1(int var_6,int nbit,int var_13)

{
  int var_3;
  int var_12;
  type_1 var_9;
  int var_14;
  type_2 var_1;
  type_1 var_8;
  type_1 uVar7;
  type_3 *var_4;
  int var_11;
  type_3 *in_stack_ffffffc8;
  int in_stack_ffffffcc;
  type_4 *puVar10;
  
  var_1 = 0x10 - (char)nbit;
  var_3 = (int)(type_1)var_7 >> (var_1 & 0x1f);
  var_2(nbit);
  var_11 = 0;
  if (var_3 == 0) {
    uVar7 = (type_1)var_7;
    var_2(nbit);
    var_4 = var_5;
    do {
      *var_4 = '\0';
      var_4 = var_4 + 1;
    } while (var_5 + var_6 != var_4);
    puVar10 = pt_table;
    do {
      *puVar10 = (type_4)((int)uVar7 >> (var_1 & 0x1f));
      puVar10 = (type_4 *)((int)puVar10 + 2);
    } while ((type_1 *)puVar10 != &blocksize);
    return;
  }
  do {
    while( true ) {
      var_12 = 3;
      uVar7 = (type_1)(var_7 >> 0xd);
      if (var_7 >> 0xd == 7) {
        if ((var_7 & 0x1000) == 0) {
          uVar7 = 7;
          var_12 = 4;
        }
        else {
          var_8 = 0x1000;
          uVar7 = 7;
          do {
            var_9 = uVar7;
            var_8 = var_8 >> 1;
            uVar7 = var_9 + 1;
          } while ((var_7 & var_8) != 0);
          if (0x10 < (int)uVar7) {
                    /* WARNING: Subroutine does not return */
            var_10("Bad table\n");
          }
          var_12 = var_9 - 2;
        }
      }
      puVar10 = (type_4 *)0x1aa37;
      var_2(var_12);
      var_12 = var_11 + 1;
      var_5[var_11] = (type_3)uVar7;
      if (var_12 == var_13) break;
      var_11 = var_12;
      if (var_3 <= var_12) {
        if (var_6 <= var_12) goto LAB_0001aa82;
        goto LAB_0001aa68;
      }
    }
    var_14 = (int)(type_1)var_7 >> 0xe;
    puVar10 = (type_4 *)0x1ab0a;
    var_2(2);
    if (var_14 != 0) {
      var_4 = var_5 + var_11;
      do {
        var_4[1] = '\0';
        var_4 = var_4 + 1;
      } while (var_4 != var_5 + var_11 + var_14);
      var_12 = var_12 + var_14;
    }
    var_11 = var_12;
  } while (var_12 < var_3);
LAB_0001aa68:
  var_4 = var_5 + var_12;
  do {
    *var_4 = '\0';
    var_4 = var_4 + 1;
  } while (var_4 != var_5 + var_6);
LAB_0001aa82:
  var_15(0x2c9e0,in_stack_ffffffc8,in_stack_ffffffcc,puVar10);
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 MASKED(int param_1,char param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  undefined2 *puVar4;
  uint uVar5;
  undefined1 *puVar6;
  int iVar7;
  int iVar8;
  
  iVar1 = (int)(uint)DAT_0002c9d4 >> (0x10U - param_2 & 0x1f);
  FUN_0001a5d0();
  iVar8 = 0;
  if (iVar1 == 0) {
    uVar2 = (uint)DAT_0002c9d4;
    FUN_0001a5d0();
    puVar6 = &DAT_0002cc00;
    do {
      *puVar6 = 0;
      puVar6 = puVar6 + 1;
    } while (&DAT_0002cc00 + param_1 != puVar6);
    puVar4 = &DAT_0002c9e0;
    do {
      *puVar4 = (short)((int)uVar2 >> (0x10U - param_2 & 0x1f));
      puVar4 = puVar4 + 1;
    } while (puVar4 != (undefined2 *)&DAT_0002cbe0);
    return;
  }
  do {
    while( true ) {
      uVar2 = (uint)(DAT_0002c9d4 >> 0xd);
      if (DAT_0002c9d4 >> 0xd == 7) {
        if ((DAT_0002c9d4 & 0x1000) == 0) {
          uVar2 = 7;
        }
        else {
          uVar5 = 0x1000;
          uVar2 = 7;
          do {
            uVar5 = uVar5 >> 1;
            uVar2 = uVar2 + 1;
          } while ((DAT_0002c9d4 & uVar5) != 0);
          if (0x10 < (int)uVar2) {
                    /* WARNING: Subroutine does not return */
            FUN_0001c790("Bad table\n");
          }
        }
      }
      FUN_0001a5d0();
      iVar7 = iVar8 + 1;
      (&DAT_0002cc00)[iVar8] = (char)uVar2;
      if (iVar7 == param_3) break;
      iVar8 = iVar7;
      if (iVar1 <= iVar7) {
        if (param_1 <= iVar7) goto LAB_0001aa82;
        goto LAB_0001aa68;
      }
    }
    iVar3 = (int)(uint)DAT_0002c9d4 >> 0xe;
    FUN_0001a5d0();
    if (iVar3 != 0) {
      puVar6 = &DAT_0002cc00 + iVar8;
      do {
        puVar6[1] = 0;
        puVar6 = puVar6 + 1;
      } while (puVar6 != &DAT_0002cc00 + iVar8 + iVar3);
      iVar7 = iVar7 + iVar3;
    }
    iVar8 = iVar7;
  } while (iVar7 < iVar1);
LAB_0001aa68:
  puVar6 = &DAT_0002cc00 + iVar7;
  do {
    *puVar6 = 0;
    puVar6 = puVar6 + 1;
  } while (puVar6 != &DAT_0002cc00 + param_1);
LAB_0001aa82:
  FUN_0001a6d0(&DAT_0002c9e0);
  return;
}

