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

bfd_boolean __regparm3
process_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)

{
  int *piVar1;
  char cVar2;
  longlong lVar3;
  ulong uVar4;
  size_t sVar5;
  uint __n;
  uchar *__ptr;
  size_t sVar6;
  elf_vma *peVar7;
  char *pcVar8;
  int iVar9;
  char *pcVar10;
  int iVar11;
  uchar *field;
  uint uVar12;
  elf_vma eVar13;
  uchar integer_buffer [8];
  
  cVar2 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar2;
  if ((int)uVar4 < 0) {
    pcVar8 = arch->file_name;
    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(pcVar10,pcVar8,uVar4);
    return 0;
  }
  uVar12 = uVar4 + 1 & 0xfffffffe;
  arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset;
  if (read_symbols == 0) {
    iVar9 = fseek((FILE *)arch->file,uVar12,1);
    if (iVar9 != 0) {
      pcVar10 = arch->file_name;
      pcVar8 = "%s: failed to skip archive symbol table\n";
      goto LAB_00012b7d;
    }
  }
  else {
    if (uVar12 < sizeof_ar_index) {
      pcVar10 = arch->file_name;
      pcVar8 = "%s: the archive index is empty\n";
      goto LAB_00012b7d;
    }
    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);
    if (sizeof_ar_index != sVar5) {
      pcVar10 = arch->file_name;
      pcVar8 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    uVar12 = uVar12 - sizeof_ar_index;
    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);
    iVar9 = (int)(eVar13 >> 0x20);
    __n = (uint)eVar13;
    arch->index_num = eVar13;
    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;
    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;
    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||
       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {
      pcVar8 = arch->file_name;
      pcVar10 = (char *)dcgettext(0,
                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                                  ,5);
      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);
      return 0;
    }
    __ptr = (uchar *)malloc(__n * sizeof_ar_index);
    if (__ptr == (uchar *)0x0) {
      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";
LAB_00012c73:
      pcVar8 = (char *)dcgettext(0,pcVar8,5);
      error(pcVar8);
      return 0;
    }
    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);
    sVar5 = (size_t)arch->index_num;
    iVar9 = *(int *)((int)&arch->index_num + 4);
    if (sVar6 != sVar5 || iVar9 != 0) {
      free(__ptr);
      pcVar10 = arch->file_name;
      pcVar8 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    sVar6 = uVar12 - sVar5 * sizeof_ar_index;
    peVar7 = (elf_vma *)malloc(sVar5 * 8);
    arch->index_array = peVar7;
    if (peVar7 == (elf_vma *)0x0) {
      free(__ptr);
      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";
      goto LAB_00012c73;
    }
    if (iVar9 != 0 || sVar5 != 0) {
      uVar12 = 0;
      field = __ptr;
      while( true ) {
        peVar7 = peVar7 + uVar12;
        uVar12 = uVar12 + 1;
        eVar13 = byte_get_big_endian(field,sizeof_ar_index);
        field = field + sizeof_ar_index;
        *peVar7 = eVar13;
        piVar1 = (int *)((int)&arch->index_num + 4);
        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;
        peVar7 = arch->index_array;
      }
    }
    free(__ptr);
    if (sVar6 == 0) {
      pcVar10 = arch->file_name;
      pcVar8 = "%s: the archive has an index but no symbols\n";
      goto LAB_00012b7d;
    }
    pcVar8 = (char *)malloc(sVar6);
    arch->sym_table = pcVar8;
    if (pcVar8 == (char *)0x0) {
      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";
      goto LAB_00012c73;
    }
    arch->sym_size = sVar6;
    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);
    if (sVar6 != sVar5) {
      pcVar10 = arch->file_name;
      pcVar8 = "%s: failed to read archive index symbol table\n";
      goto LAB_00012b7d;
    }
  }
  sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);
  if ((sVar5 == 0x3c) || (sVar5 == 0)) {
    return 1;
  }
  pcVar10 = arch->file_name;
  pcVar8 = "%s: failed to read archive header following archive index\n";
LAB_00012b7d:
  pcVar8 = (char *)dcgettext(0,pcVar8,5);
  error(pcVar8,pcVar10);
  return 0;
}



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

undefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)

{
  undefined1 uVar1;
  longlong lVar2;
  ulong uVar3;
  size_t sVar4;
  uint __n;
  void *pvVar5;
  size_t sVar6;
  void *pvVar7;
  int iVar8;
  char *pcVar9;
  undefined4 uVar10;
  undefined4 uVar11;
  int iVar12;
  void *pvVar13;
  uint uVar14;
  ulonglong uVar15;
  undefined8 uVar16;
  undefined1 local_24 [16];
  undefined4 uStack_14;
  
  uStack_14 = 0x12920;
  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);
  *(undefined1 *)((int)param_1 + 0x6e) = 0;
  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);
  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;
  if ((int)uVar3 < 0) {
    uVar11 = *param_1;
    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(uVar10,uVar11,uVar3);
    return 0;
  }
  uVar14 = uVar3 + 1 & 0xfffffffe;
  param_1[10] = uVar14 + 0x3c + param_1[10];
  if (param_3 == 0) {
    iVar8 = fseek((FILE *)param_1[1],uVar14,1);
    if (iVar8 != 0) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to skip archive symbol table\n";
      goto LAB_00012b7d;
    }
  }
  else {
    if (uVar14 < param_2) {
      uVar11 = *param_1;
      pcVar9 = "%s: the archive index is empty\n";
      goto LAB_00012b7d;
    }
    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);
    if (param_2 != sVar4) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    uVar14 = uVar14 - param_2;
    uVar15 = FUN_00012800(local_24,param_2);
    iVar8 = (int)(uVar15 >> 0x20);
    __n = (uint)uVar15;
    *(ulonglong *)(param_1 + 2) = uVar15;
    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;
    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;
    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||
       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {
      uVar11 = *param_1;
      uVar10 = dcgettext(0,
                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                         ,5);
      error(uVar10,uVar11,__n,param_2,uVar14);
      return 0;
    }
    pvVar5 = malloc(__n * param_2);
    if (pvVar5 == (void *)0x0) {
      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";
LAB_00012c73:
      uVar11 = dcgettext(0,pcVar9,5);
      error(uVar11);
      return 0;
    }
    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);
    sVar4 = param_1[2];
    iVar8 = param_1[3];
    if (sVar6 != sVar4 || iVar8 != 0) {
      free(pvVar5);
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    sVar6 = uVar14 - sVar4 * param_2;
    pvVar7 = malloc(sVar4 * 8);
    param_1[4] = pvVar7;
    if (pvVar7 == (void *)0x0) {
      free(pvVar5);
      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";
      goto LAB_00012c73;
    }
    if (iVar8 != 0 || sVar4 != 0) {
      uVar14 = 0;
      pvVar13 = pvVar5;
      while( true ) {
        iVar8 = uVar14 * 8;
        uVar14 = uVar14 + 1;
        uVar16 = FUN_00012800(pvVar13,param_2);
        pvVar13 = (void *)((int)pvVar13 + param_2);
        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;
        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;
        pvVar7 = (void *)param_1[4];
      }
    }
    free(pvVar5);
    if (sVar6 == 0) {
      uVar11 = *param_1;
      pcVar9 = "%s: the archive has an index but no symbols\n";
      goto LAB_00012b7d;
    }
    pvVar5 = malloc(sVar6);
    param_1[5] = pvVar5;
    if (pvVar5 == (void *)0x0) {
      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";
      goto LAB_00012c73;
    }
    param_1[6] = sVar6;
    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);
    if (sVar6 != sVar4) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index symbol table\n";
      goto LAB_00012b7d;
    }
  }
  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);
  if ((sVar4 == 0x3c) || (sVar4 == 0)) {
    return 1;
  }
  uVar11 = *param_1;
  pcVar9 = "%s: failed to read archive header following archive index\n";
LAB_00012b7d:
  uVar10 = dcgettext(0,pcVar9,5);
  error(uVar10,uVar11);
  return 0;
}


PUSH EBP
MOV EBP,EDX
PUSH EDI
MOV EDI,EAX
ADD EAX,0x64
PUSH ESI
PUSH EBX
CALL 0x000117c0
ADD EBX,0x66e0
SUB ESP,0x40
MOVZX EDX,byte ptr [EAX + 0xa]
MOV byte ptr [EAX + 0xa],0x0
MOV dword ptr [ESP + 0x14],ECX
MOV byte ptr [ESP + 0x10],DL
PUSH 0xa
PUSH 0x0
PUSH EAX
CALL 0x00011190
MOVZX EDX,byte ptr [ESP + 0x1c]
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x10]
TEST EAX,EAX
MOV ESI,EAX
MOV byte ptr [EDI + 0x6e],DL
JS 0x00012be0
MOV EAX,dword ptr [EDI + 0x28]
ADD ESI,0x1
AND ESI,0xfffffffe
LEA EAX,[ESI + EAX*0x1 + 0x3c]
MOV dword ptr [EDI + 0x28],EAX
TEST ECX,ECX
JZ 0x00012b28
CMP ESI,EBP
JC 0x00012b70
PUSH dword ptr [EDI + 0x4]
PUSH EBP
PUSH 0x1
LEA EDX,[ESP + 0x34]
PUSH EDX
MOV dword ptr [ESP + 0x1c],EDX
CALL 0x00011130
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
CMP EBP,EAX
JNZ 0x00012ba0
SUB ESP,0x8
SUB ESI,EBP
PUSH EBP
PUSH EDX
CALL 0x00012800
MOV dword ptr [ESP + 0x28],ESI
MOV ECX,EDX
MOV dword ptr [ESP + 0x1c],EAX
MOV EDX,EAX
MOV dword ptr [EDI + 0x8],EAX
MOV EAX,ECX
MOV dword ptr [ESP + 0x2c],EAX
IMUL EAX,EBP
MOV dword ptr [ESP + 0x20],ESI
MOV dword ptr [EDI + 0xc],ECX
MOV ECX,ESI
MOV ESI,EAX
MOV EAX,EDX
MOV dword ptr [ESP + 0x24],0x0
ADD ESP,0x10
MUL EBP
ADD EDX,ESI
CMP ECX,EAX
MOV ESI,ECX
MOV ECX,dword ptr [ESP + 0x14]
SBB ECX,EDX
JC 0x00012bb0
MOV EDX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0x14]
CMP ESI,EDX
SBB EAX,dword ptr [ESP + 0x1c]
JC 0x00012bb0
MOV EAX,EDX
SUB ESP,0xc
IMUL EAX,EBP
PUSH EAX
CALL 0x00011150
MOV dword ptr [ESP + 0x2c],EAX
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00012c68
PUSH dword ptr [EDI + 0x4]
PUSH dword ptr [ESP + 0x10]
PUSH EBP
PUSH dword ptr [ESP + 0x28]
CALL 0x00011130
MOV ESI,dword ptr [EDI + 0x8]
MOV EDX,dword ptr [EDI + 0xc]
ADD ESP,0x10
XOR EAX,ESI
OR EAX,EDX
JNZ 0x00012c28
MOV EAX,ESI
MOV ECX,dword ptr [ESP + 0x18]
MOV dword ptr [ESP + 0xc],EDX
SUB ESP,0xc
IMUL EAX,EBP
SUB ECX,EAX
LEA EAX,[ESI*0x8 + 0x0]
MOV dword ptr [ESP + 0x24],ECX
PUSH EAX
CALL 0x00011150
ADD ESP,0x10
MOV dword ptr [EDI + 0x10],EAX
TEST EAX,EAX
JZ 0x00012caa
MOV EDX,dword ptr [ESP + 0xc]
OR EDX,ESI
JZ 0x00012ac6
MOV ECX,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0xc],EBP
XOR ESI,ESI
MOV EBP,ECX
JMP 0x00012a93
MOV EAX,dword ptr [EDI + 0x10]
LEA ECX,[EAX + ESI*0x8]
SUB ESP,0x8
ADD ESI,0x1
MOV dword ptr [ESP + 0x18],ECX
PUSH dword ptr [ESP + 0x14]
PUSH EBP
CALL 0x00012800
MOV ECX,dword ptr [ESP + 0x20]
ADD EBP,dword ptr [ESP + 0x1c]
ADD ESP,0x10
MOV dword ptr [ECX + 0x4],EDX
XOR EDX,EDX
MOV dword ptr [ECX],EAX
MOV EAX,EDX
CMP ESI,dword ptr [EDI + 0x8]
SBB EAX,dword ptr [EDI + 0xc]
JC 0x00012a90
SUB ESP,0xc
PUSH dword ptr [ESP + 0x28]
CALL 0x00011080
ADD ESP,0x10
MOV ESI,dword ptr [ESP + 0x18]
TEST ESI,ESI
JZ 0x00012c8b
SUB ESP,0xc
PUSH dword ptr [ESP + 0x24]
CALL 0x00011150
ADD ESP,0x10
MOV dword ptr [EDI + 0x14],EAX
TEST EAX,EAX
JZ 0x00012c9d
MOV ESI,dword ptr [ESP + 0x18]
MOV dword ptr [EDI + 0x18],ESI
PUSH dword ptr [EDI + 0x4]
PUSH ESI
PUSH 0x1
PUSH EAX
CALL 0x00011130
ADD ESP,0x10
CMP ESI,EAX
JZ 0x00012b41
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcc68]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0x4
PUSH 0x1
PUSH ESI
PUSH dword ptr [EDI + 0x4]
CALL 0x00011100
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00012c10
LEA EAX,[EDI + 0x34]
PUSH dword ptr [EDI + 0x4]
PUSH 0x3c
PUSH 0x1
PUSH EAX
CALL 0x00011130
ADD ESP,0x10
CMP EAX,0x3c
JZ 0x00012b61
TEST EAX,EAX
JNZ 0x00012c50
ADD ESP,0x3c
MOV EAX,0x1
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcad0]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000110d0
POP EDX
POP ECX
PUSH ESI
PUSH EAX
CALL 0x00012790
ADD ESP,0x10
ADD ESP,0x3c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcaf0]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0x4
LEA EAX,[EBX + 0xffffcb14]
MOV ESI,dword ptr [EDI]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000110d0
POP EDI
PUSH dword ptr [ESP + 0x24]
PUSH EBP
PUSH dword ptr [ESP + 0x20]
PUSH ESI
PUSH EAX
CALL 0x00012790
ADD ESP,0x20
JMP 0x00012b91
SUB ESP,0x4
LEA EAX,[EBX + 0xffffca7c]
MOV EDI,dword ptr [EDI]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000110d0
ADD ESP,0xc
PUSH ESI
PUSH EDI
PUSH EAX
CALL 0x00012790
ADD ESP,0x10
XOR EAX,EAX
ADD ESP,0x3c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcaa4]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0xc
PUSH dword ptr [ESP + 0x28]
CALL 0x00011080
ADD ESP,0xc
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcaf0]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcc98]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0x4
LEA EAX,[EBX + 0xffffcb78]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x000110d0
MOV dword ptr [ESP],EAX
CALL 0x00012790
ADD ESP,0x10
JMP 0x00012b91
SUB ESP,0x4
MOV ESI,dword ptr [EDI]
LEA EAX,[EBX + 0xffffcbf8]
PUSH 0x5
JMP 0x00012b7d
SUB ESP,0x4
LEA EAX,[EBX + 0xffffcc28]
PUSH 0x5
JMP 0x00012c73
SUB ESP,0xc
PUSH dword ptr [ESP + 0x28]
CALL 0x00011080
ADD ESP,0xc
LEA EAX,[EBX + 0xffffcbb4]
PUSH 0x5
JMP 0x00012c73
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nundefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)\n\n{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}\n\n" comment (function_definition "undefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)\n\n{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00012910(undefined4 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined4 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "uint __n;" type_identifier identifier ;) (declaration "void *pvVar5;" primitive_type (pointer_declarator "*pvVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "void *pvVar7;" primitive_type (pointer_declarator "*pvVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "void *pvVar13;" primitive_type (pointer_declarator "*pvVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "ulonglong uVar15;" type_identifier identifier ;) (declaration "undefined8 uVar16;" type_identifier identifier ;) (declaration "undefined1 local_24 [16];" type_identifier (array_declarator "local_24 [16]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x12920;" (assignment_expression "uStack_14 = 0x12920" identifier = number_literal) ;) (expression_statement "uVar1 = *(undefined1 *)((int)param_1 + 0x6e);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_1 + 0x6e)" identifier = (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);" (assignment_expression "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" identifier = (call_expression "strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" identifier (argument_list "((char *)(param_1 + 0x19),(char **)0x0,10)" ( (cast_expression "(char *)(param_1 + 0x19)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x19)" ( (binary_expression "param_1 + 0x19" identifier + number_literal) ))) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = uVar1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = uVar1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" if (parenthesized_expression "((int)uVar3 < 0)" ( (binary_expression "(int)uVar3 < 0" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar11,uVar3);" (call_expression "error(uVar10,uVar11,uVar3)" identifier (argument_list "(uVar10,uVar11,uVar3)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar14 = uVar3 + 1 & 0xfffffffe;" (assignment_expression "uVar14 = uVar3 + 1 & 0xfffffffe" identifier = (binary_expression "uVar3 + 1 & 0xfffffffe" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal)) ;) (expression_statement "param_1[10] = uVar14 + 0x3c + param_1[10];" (assignment_expression "param_1[10] = uVar14 + 0x3c + param_1[10]" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (binary_expression "uVar14 + 0x3c + param_1[10]" (binary_expression "uVar14 + 0x3c" identifier + number_literal) + (subscript_expression "param_1[10]" identifier [ number_literal ]))) ;) (if_statement "if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (expression_statement "iVar8 = fseek((FILE *)param_1[1],uVar14,1);" (assignment_expression "iVar8 = fseek((FILE *)param_1[1],uVar14,1)" identifier = (call_expression "fseek((FILE *)param_1[1],uVar14,1)" identifier (argument_list "((FILE *)param_1[1],uVar14,1)" ( (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) , identifier , number_literal )))) ;) (if_statement "if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }) (else_clause "else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" else (compound_statement "{\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (if_statement "if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(uVar14 < param_2)" ( (binary_expression "uVar14 < param_2" identifier < identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: the archive index is empty\n";" (assignment_expression "pcVar9 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1])" identifier = (call_expression "fread(local_24,1,param_2,(FILE *)param_1[1])" identifier (argument_list "(local_24,1,param_2,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(param_2 != sVar4)" ( (binary_expression "param_2 != sVar4" identifier != identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "uVar14 = uVar14 - param_2;" (assignment_expression "uVar14 = uVar14 - param_2" identifier = (binary_expression "uVar14 - param_2" identifier - identifier)) ;) (expression_statement "uVar15 = FUN_00012800(local_24,param_2);" (assignment_expression "uVar15 = FUN_00012800(local_24,param_2)" identifier = (call_expression "FUN_00012800(local_24,param_2)" identifier (argument_list "(local_24,param_2)" ( identifier , identifier )))) ;) (expression_statement "iVar8 = (int)(uVar15 >> 0x20);" (assignment_expression "iVar8 = (int)(uVar15 >> 0x20)" identifier = (cast_expression "(int)(uVar15 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar15 >> 0x20)" ( (binary_expression "uVar15 >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "__n = (uint)uVar15;" (assignment_expression "__n = (uint)uVar15" identifier = (cast_expression "(uint)uVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*(ulonglong *)(param_1 + 2) = uVar15;" (assignment_expression "*(ulonglong *)(param_1 + 2) = uVar15" (pointer_expression "*(ulonglong *)(param_1 + 2)" * (cast_expression "(ulonglong *)(param_1 + 2)" ( (type_descriptor "ulonglong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;" (assignment_expression "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2" identifier = (binary_expression "(uVar15 & 0xffffffff) * (ulonglong)param_2" (parenthesized_expression "(uVar15 & 0xffffffff)" ( (binary_expression "uVar15 & 0xffffffff" identifier & number_literal) )) * (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;" (assignment_expression "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (binary_expression "iVar8 * param_2" identifier * identifier))) ;) (if_statement "if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" if (parenthesized_expression "((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)))" ( (binary_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" (parenthesized_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2))" ( (binary_expression "iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "iVar12 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "(uint)-iVar12" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar14 < (uint)lVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < (uint)lVar2)" ( (binary_expression "uVar14 < (uint)lVar2" identifier < (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) )) || (parenthesized_expression "(iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" ( (binary_expression "iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "iVar8 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "(uint)-iVar8" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar14 < __n)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < __n)" ( (binary_expression "uVar14 < __n" identifier < identifier) ))))) ))) )) (compound_statement "{\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" identifier = (call_expression "dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" identifier (argument_list "(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar11,__n,param_2,uVar14);" (call_expression "error(uVar10,uVar11,__n,param_2,uVar14)" identifier (argument_list "(uVar10,uVar11,__n,param_2,uVar14)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar5 = malloc(__n * param_2);" (assignment_expression "pvVar5 = malloc(__n * param_2)" identifier = (call_expression "malloc(__n * param_2)" identifier (argument_list "(__n * param_2)" ( (binary_expression "__n * param_2" identifier * identifier) )))) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" { (expression_statement "pcVar9 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);" statement_identifier : (expression_statement "uVar11 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar11 = dcgettext(0,pcVar9,5)" identifier = (call_expression "dcgettext(0,pcVar9,5)" identifier (argument_list "(0,pcVar9,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar11);" (call_expression "error(uVar11)" identifier (argument_list "(uVar11)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);" (assignment_expression "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar5,param_2,__n,(FILE *)param_1[1])" identifier (argument_list "(pvVar5,param_2,__n,(FILE *)param_1[1])" ( identifier , identifier , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (expression_statement "sVar4 = param_1[2];" (assignment_expression "sVar4 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = param_1[3];" (assignment_expression "iVar8 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (if_statement "if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar4 || iVar8 != 0)" ( (binary_expression "sVar6 != sVar4 || iVar8 != 0" (binary_expression "sVar6 != sVar4" identifier != identifier) || (binary_expression "iVar8 != 0" identifier != number_literal)) )) (compound_statement "{\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar6 = uVar14 - sVar4 * param_2;" (assignment_expression "sVar6 = uVar14 - sVar4 * param_2" identifier = (binary_expression "uVar14 - sVar4 * param_2" identifier - (binary_expression "sVar4 * param_2" identifier * identifier))) ;) (expression_statement "pvVar7 = malloc(sVar4 * 8);" (assignment_expression "pvVar7 = malloc(sVar4 * 8)" identifier = (call_expression "malloc(sVar4 * 8)" identifier (argument_list "(sVar4 * 8)" ( (binary_expression "sVar4 * 8" identifier * number_literal) )))) ;) (expression_statement "param_1[4] = pvVar7;" (assignment_expression "param_1[4] = pvVar7" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(pvVar7 == (void *)0x0)" ( (binary_expression "pvVar7 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (expression_statement "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (if_statement "if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" if (parenthesized_expression "(iVar8 != 0 || sVar4 != 0)" ( (binary_expression "iVar8 != 0 || sVar4 != 0" (binary_expression "iVar8 != 0" identifier != number_literal) || (binary_expression "sVar4 != 0" identifier != number_literal)) )) (compound_statement "{\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" { (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (expression_statement "pvVar13 = pvVar5;" (assignment_expression "pvVar13 = pvVar5" identifier = identifier) ;) (while_statement "while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" { (expression_statement "iVar8 = uVar14 * 8;" (assignment_expression "iVar8 = uVar14 * 8" identifier = (binary_expression "uVar14 * 8" identifier * number_literal)) ;) (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "uVar16 = FUN_00012800(pvVar13,param_2);" (assignment_expression "uVar16 = FUN_00012800(pvVar13,param_2)" identifier = (call_expression "FUN_00012800(pvVar13,param_2)" identifier (argument_list "(pvVar13,param_2)" ( identifier , identifier )))) ;) (expression_statement "pvVar13 = (void *)((int)pvVar13 + param_2);" (assignment_expression "pvVar13 = (void *)((int)pvVar13 + param_2)" identifier = (cast_expression "(void *)((int)pvVar13 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar13 + param_2)" ( (binary_expression "(int)pvVar13 + param_2" (cast_expression "(int)pvVar13" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16;" (assignment_expression "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16" (pointer_expression "*(undefined8 *)((int)pvVar7 + iVar8)" * (cast_expression "(undefined8 *)((int)pvVar7 + iVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar7 + iVar8)" ( (binary_expression "(int)pvVar7 + iVar8" (cast_expression "(int)pvVar7" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) = identifier) ;) (if_statement "if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;" if (parenthesized_expression "(param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3])" ( (binary_expression "param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) && (binary_expression "(uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (call_expression "(uint)(uVar14 < (uint)param_1[2])" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < (uint)param_1[2])" ( (binary_expression "uVar14 < (uint)param_1[2]" identifier < (cast_expression "(uint)param_1[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ))) <= (binary_expression "(uint)-param_1[3]" (parenthesized_expression "(uint)" ( identifier )) - (subscript_expression "param_1[3]" identifier [ number_literal ])))) )) (break_statement "break;" break ;)) (expression_statement "pvVar7 = (void *)param_1[4];" (assignment_expression "pvVar7 = (void *)param_1[4]" identifier = (cast_expression "(void *)param_1[4]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) })) })) (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (if_statement "if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 == 0)" ( (binary_expression "sVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar9 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "pvVar5 = malloc(sVar6);" (assignment_expression "pvVar5 = malloc(sVar6)" identifier = (call_expression "malloc(sVar6)" identifier (argument_list "(sVar6)" ( identifier )))) ;) (expression_statement "param_1[5] = pvVar5;" (assignment_expression "param_1[5] = pvVar5" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (expression_statement "param_1[6] = sVar6;" (assignment_expression "param_1[6] = sVar6" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar5,1,sVar6,(FILE *)param_1[1])" identifier (argument_list "(pvVar5,1,sVar6,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar4)" ( (binary_expression "sVar6 != sVar4" identifier != identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }))) (expression_statement "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" identifier = (call_expression "fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" identifier (argument_list "(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" ( (binary_expression "param_1 + 0xd" identifier + number_literal) , number_literal , number_literal , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }" if (parenthesized_expression "((sVar4 == 0x3c) || (sVar4 == 0))" ( (binary_expression "(sVar4 == 0x3c) || (sVar4 == 0)" (parenthesized_expression "(sVar4 == 0x3c)" ( (binary_expression "sVar4 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar4 == 0)" ( (binary_expression "sVar4 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);" statement_identifier : (expression_statement "uVar10 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar9,5)" identifier = (call_expression "dcgettext(0,pcVar9,5)" identifier (argument_list "(0,pcVar9,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar10,uVar11);" (call_expression "error(uVar10,uVar11)" identifier (argument_list "(uVar10,uVar11)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nbfd_boolean __regparm3\nprocess_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)\n\n{\n  int *piVar1;\n  char cVar2;\n  longlong lVar3;\n  ulong uVar4;\n  size_t sVar5;\n  uint __n;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  char *pcVar8;\n  int iVar9;\n  char *pcVar10;\n  int iVar11;\n  uchar *field;\n  uint uVar12;\n  elf_vma eVar13;\n  uchar integer_buffer [8];\n  \n  cVar2 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar2;\n  if ((int)uVar4 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar10,pcVar8,uVar4);\n    return 0;\n  }\n  uVar12 = uVar4 + 1 & 0xfffffffe;\n  arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar9 = fseek((FILE *)arch->file,uVar12,1);\n    if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n  if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n    return 1;\n  }\n  pcVar10 = arch->file_name;\n  pcVar8 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  pcVar8 = (char *)dcgettext(0,pcVar8,5);\n  error(pcVar8,pcVar10);\n  return 0;\n}\n\n" comment (function_definition "bfd_boolean __regparm3\nprocess_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)\n\n{\n  int *piVar1;\n  char cVar2;\n  longlong lVar3;\n  ulong uVar4;\n  size_t sVar5;\n  uint __n;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  char *pcVar8;\n  int iVar9;\n  char *pcVar10;\n  int iVar11;\n  uchar *field;\n  uint uVar12;\n  elf_vma eVar13;\n  uchar integer_buffer [8];\n  \n  cVar2 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar2;\n  if ((int)uVar4 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar10,pcVar8,uVar4);\n    return 0;\n  }\n  uVar12 = uVar4 + 1 & 0xfffffffe;\n  arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar9 = fseek((FILE *)arch->file,uVar12,1);\n    if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n  if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n    return 1;\n  }\n  pcVar10 = arch->file_name;\n  pcVar8 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  pcVar8 = (char *)dcgettext(0,pcVar8,5);\n  error(pcVar8,pcVar10);\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "process_archive_index_and_symbols(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)" identifier (parameter_list "(archive_info *arch,uint sizeof_ar_index,bfd_boolean read_symbols)" ( (parameter_declaration "archive_info *arch" type_identifier (pointer_declarator "*arch" * identifier)) , (parameter_declaration "uint sizeof_ar_index" type_identifier identifier) , (parameter_declaration "bfd_boolean read_symbols" type_identifier identifier) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  longlong lVar3;\n  ulong uVar4;\n  size_t sVar5;\n  uint __n;\n  uchar *__ptr;\n  size_t sVar6;\n  elf_vma *peVar7;\n  char *pcVar8;\n  int iVar9;\n  char *pcVar10;\n  int iVar11;\n  uchar *field;\n  uint uVar12;\n  elf_vma eVar13;\n  uchar integer_buffer [8];\n  \n  cVar2 = (arch->arhdr).ar_fmag[0];\n  (arch->arhdr).ar_fmag[0] = '\0';\n  uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);\n  (arch->arhdr).ar_fmag[0] = cVar2;\n  if ((int)uVar4 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar10,pcVar8,uVar4);\n    return 0;\n  }\n  uVar12 = uVar4 + 1 & 0xfffffffe;\n  arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset;\n  if (read_symbols == 0) {\n    iVar9 = fseek((FILE *)arch->file,uVar12,1);\n    if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);\n  if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n    return 1;\n  }\n  pcVar10 = arch->file_name;\n  pcVar8 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  pcVar8 = (char *)dcgettext(0,pcVar8,5);\n  error(pcVar8,pcVar10);\n  return 0;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "longlong lVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "uint __n;" type_identifier identifier ;) (declaration "uchar *__ptr;" type_identifier (pointer_declarator "*__ptr" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "elf_vma *peVar7;" type_identifier (pointer_declarator "*peVar7" * identifier) ;) (declaration "char *pcVar8;" primitive_type (pointer_declarator "*pcVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uchar *field;" type_identifier (pointer_declarator "*field" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "elf_vma eVar13;" type_identifier identifier ;) (declaration "uchar integer_buffer [8];" type_identifier (array_declarator "integer_buffer [8]" identifier [ number_literal ]) ;) (expression_statement "cVar2 = (arch->arhdr).ar_fmag[0];" (assignment_expression "cVar2 = (arch->arhdr).ar_fmag[0]" identifier = (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "(arch->arhdr).ar_fmag[0] = '\0';" (assignment_expression "(arch->arhdr).ar_fmag[0] = '\0'" (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10);" (assignment_expression "uVar4 = strtoul((arch->arhdr).ar_size,(char **)0x0,10)" identifier = (call_expression "strtoul((arch->arhdr).ar_size,(char **)0x0,10)" identifier (argument_list "((arch->arhdr).ar_size,(char **)0x0,10)" ( (field_expression "(arch->arhdr).ar_size" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "(arch->arhdr).ar_fmag[0] = cVar2;" (assignment_expression "(arch->arhdr).ar_fmag[0] = cVar2" (subscript_expression "(arch->arhdr).ar_fmag[0]" (field_expression "(arch->arhdr).ar_fmag" (parenthesized_expression "(arch->arhdr)" ( (field_expression "arch->arhdr" identifier -> field_identifier) )) . field_identifier) [ number_literal ]) = identifier) ;) (if_statement "if ((int)uVar4 < 0) {\n    pcVar8 = arch->file_name;\n    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar10,pcVar8,uVar4);\n    return 0;\n  }" if (parenthesized_expression "((int)uVar4 < 0)" ( (binary_expression "(int)uVar4 < 0" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    pcVar8 = arch->file_name;\n    pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(pcVar10,pcVar8,uVar4);\n    return 0;\n  }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "pcVar10 = (char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: invalid archive header size: %ld\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar10,pcVar8,uVar4);" (call_expression "error(pcVar10,pcVar8,uVar4)" identifier (argument_list "(pcVar10,pcVar8,uVar4)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar12 = uVar4 + 1 & 0xfffffffe;" (assignment_expression "uVar12 = uVar4 + 1 & 0xfffffffe" identifier = (binary_expression "uVar4 + 1 & 0xfffffffe" (binary_expression "uVar4 + 1" identifier + number_literal) & number_literal)) ;) (expression_statement "arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset;" (assignment_expression "arch->next_arhdr_offset = uVar12 + 0x3c + arch->next_arhdr_offset" (field_expression "arch->next_arhdr_offset" identifier -> field_identifier) = (binary_expression "uVar12 + 0x3c + arch->next_arhdr_offset" (binary_expression "uVar12 + 0x3c" identifier + number_literal) + (field_expression "arch->next_arhdr_offset" identifier -> field_identifier))) ;) (if_statement "if (read_symbols == 0) {\n    iVar9 = fseek((FILE *)arch->file,uVar12,1);\n    if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" if (parenthesized_expression "(read_symbols == 0)" ( (binary_expression "read_symbols == 0" identifier == number_literal) )) (compound_statement "{\n    iVar9 = fseek((FILE *)arch->file,uVar12,1);\n    if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (expression_statement "iVar9 = fseek((FILE *)arch->file,uVar12,1);" (assignment_expression "iVar9 = fseek((FILE *)arch->file,uVar12,1)" identifier = (call_expression "fseek((FILE *)arch->file,uVar12,1)" identifier (argument_list "((FILE *)arch->file,uVar12,1)" ( (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) , identifier , number_literal )))) ;) (if_statement "if (iVar9 != 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar8 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }) (else_clause "else {\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" else (compound_statement "{\n    if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);\n    if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar12 = uVar12 - sizeof_ar_index;\n    eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);\n    iVar9 = (int)(eVar13 >> 0x20);\n    __n = (uint)eVar13;\n    arch->index_num = eVar13;\n    lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;\n    iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;\n    if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }\n    __ptr = (uchar *)malloc(__n * sizeof_ar_index);\n    if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }\n    sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);\n    sVar5 = (size_t)arch->index_num;\n    iVar9 = *(int *)((int)&arch->index_num + 4);\n    if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar12 - sVar5 * sizeof_ar_index;\n    peVar7 = (elf_vma *)malloc(sVar5 * 8);\n    arch->index_array = peVar7;\n    if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }\n    free(__ptr);\n    if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pcVar8 = (char *)malloc(sVar6);\n    arch->sym_table = pcVar8;\n    if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    arch->sym_size = sVar6;\n    sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);\n    if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (if_statement "if (uVar12 < sizeof_ar_index) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(uVar12 < sizeof_ar_index)" ( (binary_expression "uVar12 < sizeof_ar_index" identifier < identifier) )) (compound_statement "{\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: the archive index is empty\n";" (assignment_expression "pcVar8 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file);" (assignment_expression "sVar5 = fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file)" identifier = (call_expression "fread(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file)" identifier (argument_list "(integer_buffer,1,sizeof_ar_index,(FILE *)arch->file)" ( identifier , number_literal , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (if_statement "if (sizeof_ar_index != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sizeof_ar_index != sVar5)" ( (binary_expression "sizeof_ar_index != sVar5" identifier != identifier) )) (compound_statement "{\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: failed to read archive index\n";" (assignment_expression "pcVar8 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "uVar12 = uVar12 - sizeof_ar_index;" (assignment_expression "uVar12 = uVar12 - sizeof_ar_index" identifier = (binary_expression "uVar12 - sizeof_ar_index" identifier - identifier)) ;) (expression_statement "eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index);" (assignment_expression "eVar13 = byte_get_big_endian(integer_buffer,sizeof_ar_index)" identifier = (call_expression "byte_get_big_endian(integer_buffer,sizeof_ar_index)" identifier (argument_list "(integer_buffer,sizeof_ar_index)" ( identifier , identifier )))) ;) (expression_statement "iVar9 = (int)(eVar13 >> 0x20);" (assignment_expression "iVar9 = (int)(eVar13 >> 0x20)" identifier = (cast_expression "(int)(eVar13 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(eVar13 >> 0x20)" ( (binary_expression "eVar13 >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "__n = (uint)eVar13;" (assignment_expression "__n = (uint)eVar13" identifier = (cast_expression "(uint)eVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "arch->index_num = eVar13;" (assignment_expression "arch->index_num = eVar13" (field_expression "arch->index_num" identifier -> field_identifier) = identifier) ;) (expression_statement "lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index;" (assignment_expression "lVar3 = (eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index" identifier = (binary_expression "(eVar13 & 0xffffffff) * (ulonglong)sizeof_ar_index" (parenthesized_expression "(eVar13 & 0xffffffff)" ( (binary_expression "eVar13 & 0xffffffff" identifier & number_literal) )) * (cast_expression "(ulonglong)sizeof_ar_index" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index;" (assignment_expression "iVar11 = (int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index" identifier = (binary_expression "(int)((ulonglong)lVar3 >> 0x20) + iVar9 * sizeof_ar_index" (cast_expression "(int)((ulonglong)lVar3 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar3 >> 0x20)" ( (binary_expression "(ulonglong)lVar3 >> 0x20" (cast_expression "(ulonglong)lVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (binary_expression "iVar9 * sizeof_ar_index" identifier * identifier))) ;) (if_statement "if ((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))) {\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }" if (parenthesized_expression "((iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n)))" ( (binary_expression "(iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)) ||\n       (iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))" (parenthesized_expression "(iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3))" ( (binary_expression "iVar11 != 0 || (uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)" (binary_expression "iVar11 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar11 < (uint)(uVar12 < (uint)lVar3)" (binary_expression "(uint)-iVar11" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar12 < (uint)lVar3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < (uint)lVar3)" ( (binary_expression "uVar12 < (uint)lVar3" identifier < (cast_expression "(uint)lVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) )) || (parenthesized_expression "(iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n))" ( (binary_expression "iVar9 != 0 || (uint)-iVar9 < (uint)(uVar12 < __n)" (binary_expression "iVar9 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar9 < (uint)(uVar12 < __n)" (binary_expression "(uint)-iVar9" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar12 < __n)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < __n)" ( (binary_expression "uVar12 < __n" identifier < identifier) ))))) ))) )) (compound_statement "{\n      pcVar8 = arch->file_name;\n      pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);\n      error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);\n      return 0;\n    }" { (expression_statement "pcVar8 = arch->file_name;" (assignment_expression "pcVar8 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5);" (assignment_expression "pcVar10 = (char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5)" identifier (argument_list "(0,\n                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                                  ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12);" (call_expression "error(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12)" identifier (argument_list "(pcVar10,pcVar8,__n,sizeof_ar_index,uVar12)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "__ptr = (uchar *)malloc(__n * sizeof_ar_index);" (assignment_expression "__ptr = (uchar *)malloc(__n * sizeof_ar_index)" identifier = (cast_expression "(uchar *)malloc(__n * sizeof_ar_index)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__n * sizeof_ar_index)" identifier (argument_list "(__n * sizeof_ar_index)" ( (binary_expression "__n * sizeof_ar_index" identifier * identifier) ))))) ;) (if_statement "if (__ptr == (uchar *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }" if (parenthesized_expression "(__ptr == (uchar *)0x0)" ( (binary_expression "__ptr == (uchar *)0x0" identifier == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar8 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);\n      error(pcVar8);\n      return 0;\n    }" { (expression_statement "pcVar8 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012c73:\n      pcVar8 = (char *)dcgettext(0,pcVar8,5);" statement_identifier : (expression_statement "pcVar8 = (char *)dcgettext(0,pcVar8,5);" (assignment_expression "pcVar8 = (char *)dcgettext(0,pcVar8,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar8,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar8,5)" identifier (argument_list "(0,pcVar8,5)" ( number_literal , identifier , number_literal ))))) ;)) (expression_statement "error(pcVar8);" (call_expression "error(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file);" (assignment_expression "sVar6 = fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file)" identifier = (call_expression "fread(__ptr,sizeof_ar_index,__n,(FILE *)arch->file)" identifier (argument_list "(__ptr,sizeof_ar_index,__n,(FILE *)arch->file)" ( identifier , identifier , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (expression_statement "sVar5 = (size_t)arch->index_num;" (assignment_expression "sVar5 = (size_t)arch->index_num" identifier = (cast_expression "(size_t)arch->index_num" ( (type_descriptor "size_t" primitive_type) ) (field_expression "arch->index_num" identifier -> field_identifier))) ;) (expression_statement "iVar9 = *(int *)((int)&arch->index_num + 4);" (assignment_expression "iVar9 = *(int *)((int)&arch->index_num + 4)" identifier = (pointer_expression "*(int *)((int)&arch->index_num + 4)" * (cast_expression "(int *)((int)&arch->index_num + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&arch->index_num + 4)" ( (binary_expression "(int)&arch->index_num + 4" (cast_expression "(int)&arch->index_num" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&arch->index_num" & (field_expression "arch->index_num" identifier -> field_identifier))) + number_literal) ))))) ;) (if_statement "if (sVar6 != sVar5 || iVar9 != 0) {\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar5 || iVar9 != 0)" ( (binary_expression "sVar6 != sVar5 || iVar9 != 0" (binary_expression "sVar6 != sVar5" identifier != identifier) || (binary_expression "iVar9 != 0" identifier != number_literal)) )) (compound_statement "{\n      free(__ptr);\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: failed to read archive index\n";" (assignment_expression "pcVar8 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar6 = uVar12 - sVar5 * sizeof_ar_index;" (assignment_expression "sVar6 = uVar12 - sVar5 * sizeof_ar_index" identifier = (binary_expression "uVar12 - sVar5 * sizeof_ar_index" identifier - (binary_expression "sVar5 * sizeof_ar_index" identifier * identifier))) ;) (expression_statement "peVar7 = (elf_vma *)malloc(sVar5 * 8);" (assignment_expression "peVar7 = (elf_vma *)malloc(sVar5 * 8)" identifier = (cast_expression "(elf_vma *)malloc(sVar5 * 8)" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar5 * 8)" identifier (argument_list "(sVar5 * 8)" ( (binary_expression "sVar5 * 8" identifier * number_literal) ))))) ;) (expression_statement "arch->index_array = peVar7;" (assignment_expression "arch->index_array = peVar7" (field_expression "arch->index_array" identifier -> field_identifier) = identifier) ;) (if_statement "if (peVar7 == (elf_vma *)0x0) {\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(peVar7 == (elf_vma *)0x0)" ( (binary_expression "peVar7 == (elf_vma *)0x0" identifier == (cast_expression "(elf_vma *)0x0" ( (type_descriptor "elf_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(__ptr);\n      pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (if_statement "if (iVar9 != 0 || sVar5 != 0) {\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }" if (parenthesized_expression "(iVar9 != 0 || sVar5 != 0)" ( (binary_expression "iVar9 != 0 || sVar5 != 0" (binary_expression "iVar9 != 0" identifier != number_literal) || (binary_expression "sVar5 != 0" identifier != number_literal)) )) (compound_statement "{\n      uVar12 = 0;\n      field = __ptr;\n      while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }\n    }" { (expression_statement "uVar12 = 0;" (assignment_expression "uVar12 = 0" identifier = number_literal) ;) (expression_statement "field = __ptr;" (assignment_expression "field = __ptr" identifier = identifier) ;) (while_statement "while( true ) {\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        peVar7 = peVar7 + uVar12;\n        uVar12 = uVar12 + 1;\n        eVar13 = byte_get_big_endian(field,sizeof_ar_index);\n        field = field + sizeof_ar_index;\n        *peVar7 = eVar13;\n        piVar1 = (int *)((int)&arch->index_num + 4);\n        if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;\n        peVar7 = arch->index_array;\n      }" { (expression_statement "peVar7 = peVar7 + uVar12;" (assignment_expression "peVar7 = peVar7 + uVar12" identifier = (binary_expression "peVar7 + uVar12" identifier + identifier)) ;) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "eVar13 = byte_get_big_endian(field,sizeof_ar_index);" (assignment_expression "eVar13 = byte_get_big_endian(field,sizeof_ar_index)" identifier = (call_expression "byte_get_big_endian(field,sizeof_ar_index)" identifier (argument_list "(field,sizeof_ar_index)" ( identifier , identifier )))) ;) (expression_statement "field = field + sizeof_ar_index;" (assignment_expression "field = field + sizeof_ar_index" identifier = (binary_expression "field + sizeof_ar_index" identifier + identifier)) ;) (expression_statement "*peVar7 = eVar13;" (assignment_expression "*peVar7 = eVar13" (pointer_expression "*peVar7" * identifier) = identifier) ;) (expression_statement "piVar1 = (int *)((int)&arch->index_num + 4);" (assignment_expression "piVar1 = (int *)((int)&arch->index_num + 4)" identifier = (cast_expression "(int *)((int)&arch->index_num + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&arch->index_num + 4)" ( (binary_expression "(int)&arch->index_num + 4" (cast_expression "(int)&arch->index_num" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&arch->index_num" & (field_expression "arch->index_num" identifier -> field_identifier))) + number_literal) )))) ;) (if_statement "if (*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1) break;" if (parenthesized_expression "(*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1)" ( (binary_expression "*piVar1 == 0 && (uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1" (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) && (binary_expression "(uint)(uVar12 < (uint)arch->index_num) <= (uint)-*piVar1" (call_expression "(uint)(uVar12 < (uint)arch->index_num)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar12 < (uint)arch->index_num)" ( (binary_expression "uVar12 < (uint)arch->index_num" identifier < (cast_expression "(uint)arch->index_num" ( (type_descriptor "uint" type_identifier) ) (field_expression "arch->index_num" identifier -> field_identifier))) ))) <= (binary_expression "(uint)-*piVar1" (parenthesized_expression "(uint)" ( identifier )) - (pointer_expression "*piVar1" * identifier)))) )) (break_statement "break;" break ;)) (expression_statement "peVar7 = arch->index_array;" (assignment_expression "peVar7 = arch->index_array" identifier = (field_expression "arch->index_array" identifier -> field_identifier)) ;) })) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (if_statement "if (sVar6 == 0) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 == 0)" ( (binary_expression "sVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar8 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "pcVar8 = (char *)malloc(sVar6);" (assignment_expression "pcVar8 = (char *)malloc(sVar6)" identifier = (cast_expression "(char *)malloc(sVar6)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar6)" identifier (argument_list "(sVar6)" ( identifier ))))) ;) (expression_statement "arch->sym_table = pcVar8;" (assignment_expression "arch->sym_table = pcVar8" (field_expression "arch->sym_table" identifier -> field_identifier) = identifier) ;) (if_statement "if (pcVar8 == (char *)0x0) {\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(pcVar8 == (char *)0x0)" ( (binary_expression "pcVar8 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "pcVar8 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar8 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (expression_statement "arch->sym_size = sVar6;" (assignment_expression "arch->sym_size = sVar6" (field_expression "arch->sym_size" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file);" (assignment_expression "sVar5 = fread(pcVar8,1,sVar6,(FILE *)arch->file)" identifier = (call_expression "fread(pcVar8,1,sVar6,(FILE *)arch->file)" identifier (argument_list "(pcVar8,1,sVar6,(FILE *)arch->file)" ( identifier , number_literal , identifier , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (if_statement "if (sVar6 != sVar5) {\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar5)" ( (binary_expression "sVar6 != sVar5" identifier != identifier) )) (compound_statement "{\n      pcVar10 = arch->file_name;\n      pcVar8 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar8 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }))) (expression_statement "sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file);" (assignment_expression "sVar5 = fread(&arch->arhdr,1,0x3c,(FILE *)arch->file)" identifier = (call_expression "fread(&arch->arhdr,1,0x3c,(FILE *)arch->file)" identifier (argument_list "(&arch->arhdr,1,0x3c,(FILE *)arch->file)" ( (pointer_expression "&arch->arhdr" & (field_expression "arch->arhdr" identifier -> field_identifier)) , number_literal , number_literal , (cast_expression "(FILE *)arch->file" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "arch->file" identifier -> field_identifier)) )))) ;) (if_statement "if ((sVar5 == 0x3c) || (sVar5 == 0)) {\n    return 1;\n  }" if (parenthesized_expression "((sVar5 == 0x3c) || (sVar5 == 0))" ( (binary_expression "(sVar5 == 0x3c) || (sVar5 == 0)" (parenthesized_expression "(sVar5 == 0x3c)" ( (binary_expression "sVar5 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar5 == 0)" ( (binary_expression "sVar5 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar10 = arch->file_name;" (assignment_expression "pcVar10 = arch->file_name" identifier = (field_expression "arch->file_name" identifier -> field_identifier)) ;) (expression_statement "pcVar8 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar8 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012b7d:\n  pcVar8 = (char *)dcgettext(0,pcVar8,5);" statement_identifier : (expression_statement "pcVar8 = (char *)dcgettext(0,pcVar8,5);" (assignment_expression "pcVar8 = (char *)dcgettext(0,pcVar8,5)" identifier = (cast_expression "(char *)dcgettext(0,pcVar8,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar8,5)" identifier (argument_list "(0,pcVar8,5)" ( number_literal , identifier , number_literal ))))) ;)) (expression_statement "error(pcVar8,pcVar10);" (call_expression "error(pcVar8,pcVar10)" identifier (argument_list "(pcVar8,pcVar10)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)\n\n{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}\n\n" (function_definition "undefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)\n\n{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "FUN_00012910(undefined4 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined4 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "size_t sVar4;" primitive_type identifier ;) (declaration "uint __n;" type_identifier identifier ;) (declaration "void *pvVar5;" primitive_type (pointer_declarator "*pvVar5" * identifier) ;) (declaration "size_t sVar6;" primitive_type identifier ;) (declaration "void *pvVar7;" primitive_type (pointer_declarator "*pvVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "undefined4 uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "void *pvVar13;" primitive_type (pointer_declarator "*pvVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "ulonglong uVar15;" type_identifier identifier ;) (declaration "undefined8 uVar16;" type_identifier identifier ;) (declaration "undefined1 local_24 [16];" type_identifier (array_declarator "local_24 [16]" identifier [ number_literal ]) ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "uStack_14 = 0x12920;" (assignment_expression "uStack_14 = 0x12920" identifier = number_literal) ;) (expression_statement "uVar1 = *(undefined1 *)((int)param_1 + 0x6e);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_1 + 0x6e)" identifier = (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);" (assignment_expression "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" identifier = (call_expression "strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" identifier (argument_list "((char *)(param_1 + 0x19),(char **)0x0,10)" ( (cast_expression "(char *)(param_1 + 0x19)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x19)" ( (binary_expression "param_1 + 0x19" identifier + number_literal) ))) , (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) , number_literal )))) ;) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = uVar1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = uVar1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" * (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)param_1 + 0x6e)" ( (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) (if_statement "if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" if (parenthesized_expression "((int)uVar3 < 0)" ( (binary_expression "(int)uVar3 < 0" (cast_expression "(int)uVar3" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier = (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" identifier (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" ( number_literal , (string_literal ""%s: invalid archive header size: %ld\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar11,uVar3);" (call_expression "error(uVar10,uVar11,uVar3)" identifier (argument_list "(uVar10,uVar11,uVar3)" ( identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar14 = uVar3 + 1 & 0xfffffffe;" (assignment_expression "uVar14 = uVar3 + 1 & 0xfffffffe" identifier = (binary_expression "uVar3 + 1 & 0xfffffffe" (binary_expression "uVar3 + 1" identifier + number_literal) & number_literal)) ;) (expression_statement "param_1[10] = uVar14 + 0x3c + param_1[10];" (assignment_expression "param_1[10] = uVar14 + 0x3c + param_1[10]" (subscript_expression "param_1[10]" identifier [ number_literal ]) = (binary_expression "uVar14 + 0x3c + param_1[10]" (binary_expression "uVar14 + 0x3c" identifier + number_literal) + (subscript_expression "param_1[10]" identifier [ number_literal ]))) ;) (if_statement "if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (expression_statement "iVar8 = fseek((FILE *)param_1[1],uVar14,1);" (assignment_expression "iVar8 = fseek((FILE *)param_1[1],uVar14,1)" identifier = (call_expression "fseek((FILE *)param_1[1],uVar14,1)" identifier (argument_list "((FILE *)param_1[1],uVar14,1)" ( (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) , identifier , number_literal )))) ;) (if_statement "if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(iVar8 != 0)" ( (binary_expression "iVar8 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to skip archive symbol table\n"" identifier = (string_literal ""%s: failed to skip archive symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }) (else_clause "else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" else (compound_statement "{\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" { (if_statement "if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(uVar14 < param_2)" ( (binary_expression "uVar14 < param_2" identifier < identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: the archive index is empty\n";" (assignment_expression "pcVar9 = "%s: the archive index is empty\n"" identifier = (string_literal ""%s: the archive index is empty\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1])" identifier = (call_expression "fread(local_24,1,param_2,(FILE *)param_1[1])" identifier (argument_list "(local_24,1,param_2,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(param_2 != sVar4)" ( (binary_expression "param_2 != sVar4" identifier != identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "uVar14 = uVar14 - param_2;" (assignment_expression "uVar14 = uVar14 - param_2" identifier = (binary_expression "uVar14 - param_2" identifier - identifier)) ;) (expression_statement "uVar15 = FUN_00012800(local_24,param_2);" (assignment_expression "uVar15 = FUN_00012800(local_24,param_2)" identifier = (call_expression "FUN_00012800(local_24,param_2)" identifier (argument_list "(local_24,param_2)" ( identifier , identifier )))) ;) (expression_statement "iVar8 = (int)(uVar15 >> 0x20);" (assignment_expression "iVar8 = (int)(uVar15 >> 0x20)" identifier = (cast_expression "(int)(uVar15 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar15 >> 0x20)" ( (binary_expression "uVar15 >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "__n = (uint)uVar15;" (assignment_expression "__n = (uint)uVar15" identifier = (cast_expression "(uint)uVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*(ulonglong *)(param_1 + 2) = uVar15;" (assignment_expression "*(ulonglong *)(param_1 + 2) = uVar15" (pointer_expression "*(ulonglong *)(param_1 + 2)" * (cast_expression "(ulonglong *)(param_1 + 2)" ( (type_descriptor "ulonglong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;" (assignment_expression "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2" identifier = (binary_expression "(uVar15 & 0xffffffff) * (ulonglong)param_2" (parenthesized_expression "(uVar15 & 0xffffffff)" ( (binary_expression "uVar15 & 0xffffffff" identifier & number_literal) )) * (cast_expression "(ulonglong)param_2" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;" (assignment_expression "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" identifier = (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) + (binary_expression "iVar8 * param_2" identifier * identifier))) ;) (if_statement "if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" if (parenthesized_expression "((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)))" ( (binary_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" (parenthesized_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2))" ( (binary_expression "iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "iVar12 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "(uint)-iVar12" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar14 < (uint)lVar2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < (uint)lVar2)" ( (binary_expression "uVar14 < (uint)lVar2" identifier < (cast_expression "(uint)lVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ))))) )) || (parenthesized_expression "(iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" ( (binary_expression "iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "iVar8 != 0" identifier != number_literal) || (binary_expression "(uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "(uint)-iVar8" (parenthesized_expression "(uint)" ( identifier )) - identifier) < (call_expression "(uint)(uVar14 < __n)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < __n)" ( (binary_expression "uVar14 < __n" identifier < identifier) ))))) ))) )) (compound_statement "{\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" identifier = (call_expression "dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" identifier (argument_list "(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" ( number_literal , (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "error(uVar10,uVar11,__n,param_2,uVar14);" (call_expression "error(uVar10,uVar11,__n,param_2,uVar14)" identifier (argument_list "(uVar10,uVar11,__n,param_2,uVar14)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "pvVar5 = malloc(__n * param_2);" (assignment_expression "pvVar5 = malloc(__n * param_2)" identifier = (call_expression "malloc(__n * param_2)" identifier (argument_list "(__n * param_2)" ( (binary_expression "__n * param_2" identifier * identifier) )))) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" { (expression_statement "pcVar9 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to read archive symbol index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);" statement_identifier : (expression_statement "uVar11 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar11 = dcgettext(0,pcVar9,5)" identifier = (call_expression "dcgettext(0,pcVar9,5)" identifier (argument_list "(0,pcVar9,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar11);" (call_expression "error(uVar11)" identifier (argument_list "(uVar11)" ( identifier ))) ;) (return_statement "return 0;" return number_literal ;) })) (expression_statement "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);" (assignment_expression "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar5,param_2,__n,(FILE *)param_1[1])" identifier (argument_list "(pvVar5,param_2,__n,(FILE *)param_1[1])" ( identifier , identifier , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (expression_statement "sVar4 = param_1[2];" (assignment_expression "sVar4 = param_1[2]" identifier = (subscript_expression "param_1[2]" identifier [ number_literal ])) ;) (expression_statement "iVar8 = param_1[3];" (assignment_expression "iVar8 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (if_statement "if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar4 || iVar8 != 0)" ( (binary_expression "sVar6 != sVar4 || iVar8 != 0" (binary_expression "sVar6 != sVar4" identifier != identifier) || (binary_expression "iVar8 != 0" identifier != number_literal)) )) (compound_statement "{\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" identifier = (string_literal ""%s: failed to read archive index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "sVar6 = uVar14 - sVar4 * param_2;" (assignment_expression "sVar6 = uVar14 - sVar4 * param_2" identifier = (binary_expression "uVar14 - sVar4 * param_2" identifier - (binary_expression "sVar4 * param_2" identifier * identifier))) ;) (expression_statement "pvVar7 = malloc(sVar4 * 8);" (assignment_expression "pvVar7 = malloc(sVar4 * 8)" identifier = (call_expression "malloc(sVar4 * 8)" identifier (argument_list "(sVar4 * 8)" ( (binary_expression "sVar4 * 8" identifier * number_literal) )))) ;) (expression_statement "param_1[4] = pvVar7;" (assignment_expression "param_1[4] = pvVar7" (subscript_expression "param_1[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(pvVar7 == (void *)0x0)" ( (binary_expression "pvVar7 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (expression_statement "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n"" identifier = (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (if_statement "if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" if (parenthesized_expression "(iVar8 != 0 || sVar4 != 0)" ( (binary_expression "iVar8 != 0 || sVar4 != 0" (binary_expression "iVar8 != 0" identifier != number_literal) || (binary_expression "sVar4 != 0" identifier != number_literal)) )) (compound_statement "{\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" { (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (expression_statement "pvVar13 = pvVar5;" (assignment_expression "pvVar13 = pvVar5" identifier = identifier) ;) (while_statement "while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" { (expression_statement "iVar8 = uVar14 * 8;" (assignment_expression "iVar8 = uVar14 * 8" identifier = (binary_expression "uVar14 * 8" identifier * number_literal)) ;) (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "uVar16 = FUN_00012800(pvVar13,param_2);" (assignment_expression "uVar16 = FUN_00012800(pvVar13,param_2)" identifier = (call_expression "FUN_00012800(pvVar13,param_2)" identifier (argument_list "(pvVar13,param_2)" ( identifier , identifier )))) ;) (expression_statement "pvVar13 = (void *)((int)pvVar13 + param_2);" (assignment_expression "pvVar13 = (void *)((int)pvVar13 + param_2)" identifier = (cast_expression "(void *)((int)pvVar13 + param_2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar13 + param_2)" ( (binary_expression "(int)pvVar13 + param_2" (cast_expression "(int)pvVar13" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16;" (assignment_expression "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16" (pointer_expression "*(undefined8 *)((int)pvVar7 + iVar8)" * (cast_expression "(undefined8 *)((int)pvVar7 + iVar8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar7 + iVar8)" ( (binary_expression "(int)pvVar7 + iVar8" (cast_expression "(int)pvVar7" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) = identifier) ;) (if_statement "if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;" if (parenthesized_expression "(param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3])" ( (binary_expression "param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) && (binary_expression "(uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (call_expression "(uint)(uVar14 < (uint)param_1[2])" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar14 < (uint)param_1[2])" ( (binary_expression "uVar14 < (uint)param_1[2]" identifier < (cast_expression "(uint)param_1[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ))) <= (binary_expression "(uint)-param_1[3]" (parenthesized_expression "(uint)" ( identifier )) - (subscript_expression "param_1[3]" identifier [ number_literal ])))) )) (break_statement "break;" break ;)) (expression_statement "pvVar7 = (void *)param_1[4];" (assignment_expression "pvVar7 = (void *)param_1[4]" identifier = (cast_expression "(void *)param_1[4]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) })) })) (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" identifier (argument_list "(pvVar5)" ( identifier ))) ;) (if_statement "if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 == 0)" ( (binary_expression "sVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar9 = "%s: the archive has an index but no symbols\n"" identifier = (string_literal ""%s: the archive has an index but no symbols\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) (expression_statement "pvVar5 = malloc(sVar6);" (assignment_expression "pvVar5 = malloc(sVar6)" identifier = (call_expression "malloc(sVar6)" identifier (argument_list "(sVar6)" ( identifier )))) ;) (expression_statement "param_1[5] = pvVar5;" (assignment_expression "param_1[5] = pvVar5" (subscript_expression "param_1[5]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" if (parenthesized_expression "(pvVar5 == (void *)0x0)" ( (binary_expression "pvVar5 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" { (expression_statement "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n"" identifier = (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012c73;" goto statement_identifier ;) })) (expression_statement "param_1[6] = sVar6;" (assignment_expression "param_1[6] = sVar6" (subscript_expression "param_1[6]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1])" identifier = (call_expression "fread(pvVar5,1,sVar6,(FILE *)param_1[1])" identifier (argument_list "(pvVar5,1,sVar6,(FILE *)param_1[1])" ( identifier , number_literal , identifier , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" if (parenthesized_expression "(sVar6 != sVar4)" ( (binary_expression "sVar6 != sVar4" identifier != identifier) )) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" { (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index symbol table\n"" identifier = (string_literal ""%s: failed to read archive index symbol table\n"" " string_content escape_sequence ")) ;) (goto_statement "goto LAB_00012b7d;" goto statement_identifier ;) })) }))) (expression_statement "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" identifier = (call_expression "fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" identifier (argument_list "(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" ( (binary_expression "param_1 + 0xd" identifier + number_literal) , number_literal , number_literal , (cast_expression "(FILE *)param_1[1]" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) )))) ;) (if_statement "if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }" if (parenthesized_expression "((sVar4 == 0x3c) || (sVar4 == 0))" ( (binary_expression "(sVar4 == 0x3c) || (sVar4 == 0)" (parenthesized_expression "(sVar4 == 0x3c)" ( (binary_expression "sVar4 == 0x3c" identifier == number_literal) )) || (parenthesized_expression "(sVar4 == 0)" ( (binary_expression "sVar4 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "pcVar9 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive header following archive index\n"" identifier = (string_literal ""%s: failed to read archive header following archive index\n"" " string_content escape_sequence ")) ;) (labeled_statement "LAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);" statement_identifier : (expression_statement "uVar10 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar9,5)" identifier = (call_expression "dcgettext(0,pcVar9,5)" identifier (argument_list "(0,pcVar9,5)" ( number_literal , identifier , number_literal )))) ;)) (expression_statement "error(uVar10,uVar11);" (call_expression "error(uVar10,uVar11)" identifier (argument_list "(uVar10,uVar11)" ( identifier , identifier ))) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) LIT) , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) & LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT + LIT) + (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) + (binary_expression IDENT * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) || (binary_expression (binary_expression (parenthesized_expression ( IDENT )) - IDENT) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) )) || (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) || (binary_expression (binary_expression (parenthesized_expression ( IDENT )) - IDENT) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT != IDENT) || (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (binary_expression IDENT * IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT != LIT) || (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) && (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) <= (binary_expression (parenthesized_expression ( IDENT )) - (subscript_expression IDENT [ LIT ])))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content escape_sequence ")) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT )))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return LIT ;) })))
(function_definition "undefined4 __regparm3 FUN_00012910(undefined4 *param_1,uint param_2,int param_3)\n\n{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" (type_identifier "undefined4") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00012910(undefined4 *param_1,uint param_2,int param_3)" (identifier "FUN_00012910") (parameter_list "(undefined4 *param_1,uint param_2,int param_3)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined1 uVar1;\n  longlong lVar2;\n  ulong uVar3;\n  size_t sVar4;\n  uint __n;\n  void *pvVar5;\n  size_t sVar6;\n  void *pvVar7;\n  int iVar8;\n  char *pcVar9;\n  undefined4 uVar10;\n  undefined4 uVar11;\n  int iVar12;\n  void *pvVar13;\n  uint uVar14;\n  ulonglong uVar15;\n  undefined8 uVar16;\n  undefined1 local_24 [16];\n  undefined4 uStack_14;\n  \n  uStack_14 = 0x12920;\n  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);\n  *(undefined1 *)((int)param_1 + 0x6e) = 0;\n  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);\n  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;\n  if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }\n  uVar14 = uVar3 + 1 & 0xfffffffe;\n  param_1[10] = uVar14 + 0x3c + param_1[10];\n  if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);\n  if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }\n  uVar11 = *param_1;\n  pcVar9 = "%s: failed to read archive header following archive index\n";\nLAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);\n  error(uVar10,uVar11);\n  return 0;\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "longlong lVar2;" (type_identifier "longlong") (identifier "lVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "size_t sVar4;" (primitive_type "size_t") (identifier "sVar4") (; ";")) (declaration "uint __n;" (type_identifier "uint") (identifier "__n") (; ";")) (declaration "void *pvVar5;" (primitive_type "void") (pointer_declarator "*pvVar5" (* "*") (identifier "pvVar5")) (; ";")) (declaration "size_t sVar6;" (primitive_type "size_t") (identifier "sVar6") (; ";")) (declaration "void *pvVar7;" (primitive_type "void") (pointer_declarator "*pvVar7" (* "*") (identifier "pvVar7")) (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "char *pcVar9;" (primitive_type "char") (pointer_declarator "*pcVar9" (* "*") (identifier "pcVar9")) (; ";")) (declaration "undefined4 uVar10;" (type_identifier "undefined4") (identifier "uVar10") (; ";")) (declaration "undefined4 uVar11;" (type_identifier "undefined4") (identifier "uVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "void *pvVar13;" (primitive_type "void") (pointer_declarator "*pvVar13" (* "*") (identifier "pvVar13")) (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "ulonglong uVar15;" (type_identifier "ulonglong") (identifier "uVar15") (; ";")) (declaration "undefined8 uVar16;" (type_identifier "undefined8") (identifier "uVar16") (; ";")) (declaration "undefined1 local_24 [16];" (type_identifier "undefined1") (array_declarator "local_24 [16]" (identifier "local_24") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "uStack_14 = 0x12920;" (assignment_expression "uStack_14 = 0x12920" (identifier "uStack_14") (= "=") (number_literal "0x12920")) (; ";")) (expression_statement "uVar1 = *(undefined1 *)((int)param_1 + 0x6e);" (assignment_expression "uVar1 = *(undefined1 *)((int)param_1 + 0x6e)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x6e)" (( "(") (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x6e")) () ")"))))) (; ";")) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = 0;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = 0" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x6e)" (( "(") (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x6e")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);" (assignment_expression "uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" (identifier "uVar3") (= "=") (call_expression "strtoul((char *)(param_1 + 0x19),(char **)0x0,10)" (identifier "strtoul") (argument_list "((char *)(param_1 + 0x19),(char **)0x0,10)" (( "(") (cast_expression "(char *)(param_1 + 0x19)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x19)" (( "(") (binary_expression "param_1 + 0x19" (identifier "param_1") (+ "+") (number_literal "0x19")) () ")"))) (, ",") (cast_expression "(char **)0x0" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (number_literal "0x0")) (, ",") (number_literal "10") () ")")))) (; ";")) (expression_statement "*(undefined1 *)((int)param_1 + 0x6e) = uVar1;" (assignment_expression "*(undefined1 *)((int)param_1 + 0x6e) = uVar1" (pointer_expression "*(undefined1 *)((int)param_1 + 0x6e)" (* "*") (cast_expression "(undefined1 *)((int)param_1 + 0x6e)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)param_1 + 0x6e)" (( "(") (binary_expression "(int)param_1 + 0x6e" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (number_literal "0x6e")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if ((int)uVar3 < 0) {\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" (if "if") (parenthesized_expression "((int)uVar3 < 0)" (( "(") (binary_expression "(int)uVar3 < 0" (cast_expression "(int)uVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar3")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    uVar11 = *param_1;\n    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);\n    error(uVar10,uVar11,uVar3);\n    return 0;\n  }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);" (assignment_expression "uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,"%s: invalid archive header size: %ld\n",5)" (identifier "dcgettext") (argument_list "(0,"%s: invalid archive header size: %ld\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: invalid archive header size: %ld\n"" (" """) (string_content "%s: invalid archive header size: %ld") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar10,uVar11,uVar3);" (call_expression "error(uVar10,uVar11,uVar3)" (identifier "error") (argument_list "(uVar10,uVar11,uVar3)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar11") (, ",") (identifier "uVar3") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar14 = uVar3 + 1 & 0xfffffffe;" (assignment_expression "uVar14 = uVar3 + 1 & 0xfffffffe" (identifier "uVar14") (= "=") (binary_expression "uVar3 + 1 & 0xfffffffe" (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) (& "&") (number_literal "0xfffffffe"))) (; ";")) (expression_statement "param_1[10] = uVar14 + 0x3c + param_1[10];" (assignment_expression "param_1[10] = uVar14 + 0x3c + param_1[10]" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (binary_expression "uVar14 + 0x3c + param_1[10]" (binary_expression "uVar14 + 0x3c" (identifier "uVar14") (+ "+") (number_literal "0x3c")) (+ "+") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")))) (; ";")) (if_statement "if (param_3 == 0) {\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }\n  else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar8 = fseek((FILE *)param_1[1],uVar14,1);\n    if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" ({ "{") (expression_statement "iVar8 = fseek((FILE *)param_1[1],uVar14,1);" (assignment_expression "iVar8 = fseek((FILE *)param_1[1],uVar14,1)" (identifier "iVar8") (= "=") (call_expression "fseek((FILE *)param_1[1],uVar14,1)" (identifier "fseek") (argument_list "((FILE *)param_1[1],uVar14,1)" (( "(") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (, ",") (identifier "uVar14") (, ",") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar8 != 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(iVar8 != 0)" (( "(") (binary_expression "iVar8 != 0" (identifier "iVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to skip archive symbol table\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: failed to skip archive symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to skip archive symbol table\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: failed to skip archive symbol table\n"" (" """) (string_content "%s: failed to skip archive symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" (else "else") (compound_statement "{\n    if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }\n    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);\n    if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    uVar14 = uVar14 - param_2;\n    uVar15 = FUN_00012800(local_24,param_2);\n    iVar8 = (int)(uVar15 >> 0x20);\n    __n = (uint)uVar15;\n    *(ulonglong *)(param_1 + 2) = uVar15;\n    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;\n    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;\n    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }\n    pvVar5 = malloc(__n * param_2);\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }\n    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);\n    sVar4 = param_1[2];\n    iVar8 = param_1[3];\n    if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }\n    sVar6 = uVar14 - sVar4 * param_2;\n    pvVar7 = malloc(sVar4 * 8);\n    param_1[4] = pvVar7;\n    if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }\n    if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }\n    free(pvVar5);\n    if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }\n    pvVar5 = malloc(sVar6);\n    param_1[5] = pvVar5;\n    if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }\n    param_1[6] = sVar6;\n    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);\n    if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }\n  }" ({ "{") (if_statement "if (uVar14 < param_2) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(uVar14 < param_2)" (( "(") (binary_expression "uVar14 < param_2" (identifier "uVar14") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive index is empty\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: the archive index is empty\n";" (assignment_expression "pcVar9 = "%s: the archive index is empty\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: the archive index is empty\n"" (" """) (string_content "%s: the archive index is empty") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (expression_statement "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1])" (identifier "sVar4") (= "=") (call_expression "fread(local_24,1,param_2,(FILE *)param_1[1])" (identifier "fread") (argument_list "(local_24,1,param_2,(FILE *)param_1[1])" (( "(") (identifier "local_24") (, ",") (number_literal "1") (, ",") (identifier "param_2") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (if_statement "if (param_2 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(param_2 != sVar4)" (( "(") (binary_expression "param_2 != sVar4" (identifier "param_2") (!= "!=") (identifier "sVar4")) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: failed to read archive index\n"" (" """) (string_content "%s: failed to read archive index") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (expression_statement "uVar14 = uVar14 - param_2;" (assignment_expression "uVar14 = uVar14 - param_2" (identifier "uVar14") (= "=") (binary_expression "uVar14 - param_2" (identifier "uVar14") (- "-") (identifier "param_2"))) (; ";")) (expression_statement "uVar15 = FUN_00012800(local_24,param_2);" (assignment_expression "uVar15 = FUN_00012800(local_24,param_2)" (identifier "uVar15") (= "=") (call_expression "FUN_00012800(local_24,param_2)" (identifier "FUN_00012800") (argument_list "(local_24,param_2)" (( "(") (identifier "local_24") (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "iVar8 = (int)(uVar15 >> 0x20);" (assignment_expression "iVar8 = (int)(uVar15 >> 0x20)" (identifier "iVar8") (= "=") (cast_expression "(int)(uVar15 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar15 >> 0x20)" (( "(") (binary_expression "uVar15 >> 0x20" (identifier "uVar15") (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "__n = (uint)uVar15;" (assignment_expression "__n = (uint)uVar15" (identifier "__n") (= "=") (cast_expression "(uint)uVar15" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar15"))) (; ";")) (expression_statement "*(ulonglong *)(param_1 + 2) = uVar15;" (assignment_expression "*(ulonglong *)(param_1 + 2) = uVar15" (pointer_expression "*(ulonglong *)(param_1 + 2)" (* "*") (cast_expression "(ulonglong *)(param_1 + 2)" (( "(") (type_descriptor "ulonglong *" (type_identifier "ulonglong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")")))) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;" (assignment_expression "lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2" (identifier "lVar2") (= "=") (binary_expression "(uVar15 & 0xffffffff) * (ulonglong)param_2" (parenthesized_expression "(uVar15 & 0xffffffff)" (( "(") (binary_expression "uVar15 & 0xffffffff" (identifier "uVar15") (& "&") (number_literal "0xffffffff")) () ")")) (* "*") (cast_expression "(ulonglong)param_2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_2")))) (; ";")) (expression_statement "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;" (assignment_expression "iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" (identifier "iVar12") (= "=") (binary_expression "(int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2" (cast_expression "(int)((ulonglong)lVar2 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar2 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar2")) (>> ">>") (number_literal "0x20")) () ")"))) (+ "+") (binary_expression "iVar8 * param_2" (identifier "iVar8") (* "*") (identifier "param_2")))) (; ";")) (if_statement "if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" (if "if") (parenthesized_expression "((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)))" (( "(") (binary_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||\n       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" (parenthesized_expression "(iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2))" (( "(") (binary_expression "iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "iVar12 != 0" (identifier "iVar12") (!= "!=") (number_literal "0")) (|| "||") (binary_expression "(uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)" (binary_expression "(uint)-iVar12" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (- "-") (identifier "iVar12")) (< "<") (call_expression "(uint)(uVar14 < (uint)lVar2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < (uint)lVar2)" (( "(") (binary_expression "uVar14 < (uint)lVar2" (identifier "uVar14") (< "<") (cast_expression "(uint)lVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar2"))) () ")"))))) () ")")) (|| "||") (parenthesized_expression "(iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))" (( "(") (binary_expression "iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "iVar8 != 0" (identifier "iVar8") (!= "!=") (number_literal "0")) (|| "||") (binary_expression "(uint)-iVar8 < (uint)(uVar14 < __n)" (binary_expression "(uint)-iVar8" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (- "-") (identifier "iVar8")) (< "<") (call_expression "(uint)(uVar14 < __n)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < __n)" (( "(") (binary_expression "uVar14 < __n" (identifier "uVar14") (< "<") (identifier "__n")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);\n      error(uVar10,uVar11,__n,param_2,uVar14);\n      return 0;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5);" (assignment_expression "uVar10 = dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" (identifier "dcgettext") (argument_list "(0,\n                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"\n                         ,5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"" (" """) (string_content "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "error(uVar10,uVar11,__n,param_2,uVar14);" (call_expression "error(uVar10,uVar11,__n,param_2,uVar14)" (identifier "error") (argument_list "(uVar10,uVar11,__n,param_2,uVar14)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar11") (, ",") (identifier "__n") (, ",") (identifier "param_2") (, ",") (identifier "uVar14") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pvVar5 = malloc(__n * param_2);" (assignment_expression "pvVar5 = malloc(__n * param_2)" (identifier "pvVar5") (= "=") (call_expression "malloc(__n * param_2)" (identifier "malloc") (argument_list "(__n * param_2)" (( "(") (binary_expression "__n * param_2" (identifier "__n") (* "*") (identifier "param_2")) () ")")))) (; ";")) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" (if "if") (parenthesized_expression "(pvVar5 == (void *)0x0)" (( "(") (binary_expression "pvVar5 == (void *)0x0" (identifier "pvVar5") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";\nLAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);\n      error(uVar11);\n      return 0;\n    }" ({ "{") (expression_statement "pcVar9 = "Out of memory whilst trying to read archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive symbol index\n"" (identifier "pcVar9") (= "=") (string_literal ""Out of memory whilst trying to read archive symbol index\n"" (" """) (string_content "Out of memory whilst trying to read archive symbol index") (escape_sequence "\n") (" """))) (; ";")) (labeled_statement "LAB_00012c73:\n      uVar11 = dcgettext(0,pcVar9,5);" (statement_identifier "LAB_00012c73") (: ":") (expression_statement "uVar11 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar11 = dcgettext(0,pcVar9,5)" (identifier "uVar11") (= "=") (call_expression "dcgettext(0,pcVar9,5)" (identifier "dcgettext") (argument_list "(0,pcVar9,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar9") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "error(uVar11);" (call_expression "error(uVar11)" (identifier "error") (argument_list "(uVar11)" (( "(") (identifier "uVar11") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);" (assignment_expression "sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1])" (identifier "sVar6") (= "=") (call_expression "fread(pvVar5,param_2,__n,(FILE *)param_1[1])" (identifier "fread") (argument_list "(pvVar5,param_2,__n,(FILE *)param_1[1])" (( "(") (identifier "pvVar5") (, ",") (identifier "param_2") (, ",") (identifier "__n") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (expression_statement "sVar4 = param_1[2];" (assignment_expression "sVar4 = param_1[2]" (identifier "sVar4") (= "=") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar8 = param_1[3];" (assignment_expression "iVar8 = param_1[3]" (identifier "iVar8") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (if_statement "if (sVar6 != sVar4 || iVar8 != 0) {\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(sVar6 != sVar4 || iVar8 != 0)" (( "(") (binary_expression "sVar6 != sVar4 || iVar8 != 0" (binary_expression "sVar6 != sVar4" (identifier "sVar6") (!= "!=") (identifier "sVar4")) (|| "||") (binary_expression "iVar8 != 0" (identifier "iVar8") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n      free(pvVar5);\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" (identifier "free") (argument_list "(pvVar5)" (( "(") (identifier "pvVar5") () ")"))) (; ";")) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: failed to read archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: failed to read archive index\n"" (" """) (string_content "%s: failed to read archive index") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (expression_statement "sVar6 = uVar14 - sVar4 * param_2;" (assignment_expression "sVar6 = uVar14 - sVar4 * param_2" (identifier "sVar6") (= "=") (binary_expression "uVar14 - sVar4 * param_2" (identifier "uVar14") (- "-") (binary_expression "sVar4 * param_2" (identifier "sVar4") (* "*") (identifier "param_2")))) (; ";")) (expression_statement "pvVar7 = malloc(sVar4 * 8);" (assignment_expression "pvVar7 = malloc(sVar4 * 8)" (identifier "pvVar7") (= "=") (call_expression "malloc(sVar4 * 8)" (identifier "malloc") (argument_list "(sVar4 * 8)" (( "(") (binary_expression "sVar4 * 8" (identifier "sVar4") (* "*") (number_literal "8")) () ")")))) (; ";")) (expression_statement "param_1[4] = pvVar7;" (assignment_expression "param_1[4] = pvVar7" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "pvVar7")) (; ";")) (if_statement "if (pvVar7 == (void *)0x0) {\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" (if "if") (parenthesized_expression "(pvVar7 == (void *)0x0)" (( "(") (binary_expression "pvVar7 == (void *)0x0" (identifier "pvVar7") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free(pvVar5);\n      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";\n      goto LAB_00012c73;\n    }" ({ "{") (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" (identifier "free") (argument_list "(pvVar5)" (( "(") (identifier "pvVar5") () ")"))) (; ";")) (expression_statement "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n"" (identifier "pcVar9") (= "=") (string_literal ""Out of memory whilst trying to convert the archive symbol index\n"" (" """) (string_content "Out of memory whilst trying to convert the archive symbol index") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012c73;" (goto "goto") (statement_identifier "LAB_00012c73") (; ";")) (} "}"))) (if_statement "if (iVar8 != 0 || sVar4 != 0) {\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" (if "if") (parenthesized_expression "(iVar8 != 0 || sVar4 != 0)" (( "(") (binary_expression "iVar8 != 0 || sVar4 != 0" (binary_expression "iVar8 != 0" (identifier "iVar8") (!= "!=") (number_literal "0")) (|| "||") (binary_expression "sVar4 != 0" (identifier "sVar4") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n      uVar14 = 0;\n      pvVar13 = pvVar5;\n      while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }\n    }" ({ "{") (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" (identifier "uVar14") (= "=") (number_literal "0")) (; ";")) (expression_statement "pvVar13 = pvVar5;" (assignment_expression "pvVar13 = pvVar5" (identifier "pvVar13") (= "=") (identifier "pvVar5")) (; ";")) (while_statement "while( true ) {\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar8 = uVar14 * 8;\n        uVar14 = uVar14 + 1;\n        uVar16 = FUN_00012800(pvVar13,param_2);\n        pvVar13 = (void *)((int)pvVar13 + param_2);\n        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;\n        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;\n        pvVar7 = (void *)param_1[4];\n      }" ({ "{") (expression_statement "iVar8 = uVar14 * 8;" (assignment_expression "iVar8 = uVar14 * 8" (identifier "iVar8") (= "=") (binary_expression "uVar14 * 8" (identifier "uVar14") (* "*") (number_literal "8"))) (; ";")) (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" (identifier "uVar14") (= "=") (binary_expression "uVar14 + 1" (identifier "uVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar16 = FUN_00012800(pvVar13,param_2);" (assignment_expression "uVar16 = FUN_00012800(pvVar13,param_2)" (identifier "uVar16") (= "=") (call_expression "FUN_00012800(pvVar13,param_2)" (identifier "FUN_00012800") (argument_list "(pvVar13,param_2)" (( "(") (identifier "pvVar13") (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "pvVar13 = (void *)((int)pvVar13 + param_2);" (assignment_expression "pvVar13 = (void *)((int)pvVar13 + param_2)" (identifier "pvVar13") (= "=") (cast_expression "(void *)((int)pvVar13 + param_2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar13 + param_2)" (( "(") (binary_expression "(int)pvVar13 + param_2" (cast_expression "(int)pvVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar13")) (+ "+") (identifier "param_2")) () ")")))) (; ";")) (expression_statement "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16;" (assignment_expression "*(undefined8 *)((int)pvVar7 + iVar8) = uVar16" (pointer_expression "*(undefined8 *)((int)pvVar7 + iVar8)" (* "*") (cast_expression "(undefined8 *)((int)pvVar7 + iVar8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar7 + iVar8)" (( "(") (binary_expression "(int)pvVar7 + iVar8" (cast_expression "(int)pvVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar7")) (+ "+") (identifier "iVar8")) () ")")))) (= "=") (identifier "uVar16")) (; ";")) (if_statement "if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;" (if "if") (parenthesized_expression "(param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3])" (( "(") (binary_expression "param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) (&& "&&") (binary_expression "(uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]" (call_expression "(uint)(uVar14 < (uint)param_1[2])" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar14 < (uint)param_1[2])" (( "(") (binary_expression "uVar14 < (uint)param_1[2]" (identifier "uVar14") (< "<") (cast_expression "(uint)param_1[2]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) () ")"))) (<= "<=") (binary_expression "(uint)-param_1[3]" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (- "-") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pvVar7 = (void *)param_1[4];" (assignment_expression "pvVar7 = (void *)param_1[4]" (identifier "pvVar7") (= "=") (cast_expression "(void *)param_1[4]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (} "}"))) (} "}"))) (expression_statement "free(pvVar5);" (call_expression "free(pvVar5)" (identifier "free") (argument_list "(pvVar5)" (( "(") (identifier "pvVar5") () ")"))) (; ";")) (if_statement "if (sVar6 == 0) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(sVar6 == 0)" (( "(") (binary_expression "sVar6 == 0" (identifier "sVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: the archive has an index but no symbols\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: the archive has an index but no symbols\n";" (assignment_expression "pcVar9 = "%s: the archive has an index but no symbols\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: the archive has an index but no symbols\n"" (" """) (string_content "%s: the archive has an index but no symbols") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (expression_statement "pvVar5 = malloc(sVar6);" (assignment_expression "pvVar5 = malloc(sVar6)" (identifier "pvVar5") (= "=") (call_expression "malloc(sVar6)" (identifier "malloc") (argument_list "(sVar6)" (( "(") (identifier "sVar6") () ")")))) (; ";")) (expression_statement "param_1[5] = pvVar5;" (assignment_expression "param_1[5] = pvVar5" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "pvVar5")) (; ";")) (if_statement "if (pvVar5 == (void *)0x0) {\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" (if "if") (parenthesized_expression "(pvVar5 == (void *)0x0)" (( "(") (binary_expression "pvVar5 == (void *)0x0" (identifier "pvVar5") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";\n      goto LAB_00012c73;\n    }" ({ "{") (expression_statement "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";" (assignment_expression "pcVar9 = "Out of memory whilst trying to read archive index symbol table\n"" (identifier "pcVar9") (= "=") (string_literal ""Out of memory whilst trying to read archive index symbol table\n"" (" """) (string_content "Out of memory whilst trying to read archive index symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012c73;" (goto "goto") (statement_identifier "LAB_00012c73") (; ";")) (} "}"))) (expression_statement "param_1[6] = sVar6;" (assignment_expression "param_1[6] = sVar6" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "sVar6")) (; ";")) (expression_statement "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1])" (identifier "sVar4") (= "=") (call_expression "fread(pvVar5,1,sVar6,(FILE *)param_1[1])" (identifier "fread") (argument_list "(pvVar5,1,sVar6,(FILE *)param_1[1])" (( "(") (identifier "pvVar5") (, ",") (number_literal "1") (, ",") (identifier "sVar6") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (if_statement "if (sVar6 != sVar4) {\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" (if "if") (parenthesized_expression "(sVar6 != sVar4)" (( "(") (binary_expression "sVar6 != sVar4" (identifier "sVar6") (!= "!=") (identifier "sVar4")) () ")")) (compound_statement "{\n      uVar11 = *param_1;\n      pcVar9 = "%s: failed to read archive index symbol table\n";\n      goto LAB_00012b7d;\n    }" ({ "{") (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: failed to read archive index symbol table\n";" (assignment_expression "pcVar9 = "%s: failed to read archive index symbol table\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: failed to read archive index symbol table\n"" (" """) (string_content "%s: failed to read archive index symbol table") (escape_sequence "\n") (" """))) (; ";")) (goto_statement "goto LAB_00012b7d;" (goto "goto") (statement_identifier "LAB_00012b7d") (; ";")) (} "}"))) (} "}")))) (expression_statement "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);" (assignment_expression "sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" (identifier "sVar4") (= "=") (call_expression "fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" (identifier "fread") (argument_list "(param_1 + 0xd,1,0x3c,(FILE *)param_1[1])" (( "(") (binary_expression "param_1 + 0xd" (identifier "param_1") (+ "+") (number_literal "0xd")) (, ",") (number_literal "1") (, ",") (number_literal "0x3c") (, ",") (cast_expression "(FILE *)param_1[1]" (( "(") (type_descriptor "FILE *" (type_identifier "FILE") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")))) (; ";")) (if_statement "if ((sVar4 == 0x3c) || (sVar4 == 0)) {\n    return 1;\n  }" (if "if") (parenthesized_expression "((sVar4 == 0x3c) || (sVar4 == 0))" (( "(") (binary_expression "(sVar4 == 0x3c) || (sVar4 == 0)" (parenthesized_expression "(sVar4 == 0x3c)" (( "(") (binary_expression "sVar4 == 0x3c" (identifier "sVar4") (== "==") (number_literal "0x3c")) () ")")) (|| "||") (parenthesized_expression "(sVar4 == 0)" (( "(") (binary_expression "sVar4 == 0" (identifier "sVar4") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar11 = *param_1;" (assignment_expression "uVar11 = *param_1" (identifier "uVar11") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "pcVar9 = "%s: failed to read archive header following archive index\n";" (assignment_expression "pcVar9 = "%s: failed to read archive header following archive index\n"" (identifier "pcVar9") (= "=") (string_literal ""%s: failed to read archive header following archive index\n"" (" """) (string_content "%s: failed to read archive header following archive index") (escape_sequence "\n") (" """))) (; ";")) (labeled_statement "LAB_00012b7d:\n  uVar10 = dcgettext(0,pcVar9,5);" (statement_identifier "LAB_00012b7d") (: ":") (expression_statement "uVar10 = dcgettext(0,pcVar9,5);" (assignment_expression "uVar10 = dcgettext(0,pcVar9,5)" (identifier "uVar10") (= "=") (call_expression "dcgettext(0,pcVar9,5)" (identifier "dcgettext") (argument_list "(0,pcVar9,5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar9") (, ",") (number_literal "5") () ")")))) (; ";"))) (expression_statement "error(uVar10,uVar11);" (call_expression "error(uVar10,uVar11)" (identifier "error") (argument_list "(uVar10,uVar11)" (( "(") (identifier "uVar10") (, ",") (identifier "uVar11") () ")"))) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

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

type_1 __regparm3
function_1(type_2 *arch,type_3 var_9,type_1 var_6)

{
  int *piVar1;
  char cVar2;
  type_4 lVar3;
  type_5 var_4;
  size_t var_11;
  type_3 var_15;
  type_6 *var_17;
  size_t var_18;
  type_7 *var_20;
  char *var_22;
  int var_8;
  char *pcVar10;
  int var_14;
  type_6 *var_21;
  type_3 var_5;
  type_7 var_13;
  type_6 integer_buffer [8];
  
  cVar2 = (arch->arhdr).ar_fmag[0];
  (arch->arhdr).ar_fmag[0] = '\0';
  var_4 = var_1((arch->arhdr).ar_size,(char **)0x0,10);
  (arch->arhdr).ar_fmag[0] = cVar2;
  if ((int)var_4 < 0) {
    var_22 = arch->file_name;
    pcVar10 = (char *)var_2(0,"%s: invalid archive header size: %ld\n",5);
    var_3(pcVar10,var_22,var_4);
    return 0;
  }
  var_5 = var_4 + 1 & 0xfffffffe;
  arch->next_arhdr_offset = var_5 + 0x3c + arch->next_arhdr_offset;
  if (var_6 == 0) {
    var_8 = var_7((type_8 *)arch->file,var_5,1);
    if (var_8 != 0) {
      pcVar10 = arch->file_name;
      var_22 = "%s: failed to skip archive symbol table\n";
      goto LAB_00012b7d;
    }
  }
  else {
    if (var_5 < var_9) {
      pcVar10 = arch->file_name;
      var_22 = "%s: the archive index is empty\n";
      goto LAB_00012b7d;
    }
    var_11 = var_10(integer_buffer,1,var_9,(type_8 *)arch->file);
    if (var_9 != var_11) {
      pcVar10 = arch->file_name;
      var_22 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    var_5 = var_5 - var_9;
    var_13 = var_12(integer_buffer,var_9);
    var_8 = (int)(var_13 >> 0x20);
    var_15 = (type_3)var_13;
    arch->index_num = var_13;
    lVar3 = (var_13 & 0xffffffff) * (type_9)var_9;
    var_14 = (int)((type_9)lVar3 >> 0x20) + var_8 * var_9;
    if ((var_14 != 0 || (type_3)-var_14 < (type_3)(var_5 < (type_3)lVar3)) ||
       (var_8 != 0 || (type_3)-var_8 < (type_3)(var_5 < var_15))) {
      var_22 = arch->file_name;
      pcVar10 = (char *)var_2(0,
                                  "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                                  ,5);
      var_3(pcVar10,var_22,var_15,var_9,var_5);
      return 0;
    }
    var_17 = (type_6 *)var_16(var_15 * var_9);
    if (var_17 == (type_6 *)0x0) {
      var_22 = "Out of memory whilst trying to read archive symbol index\n";
LAB_00012c73:
      var_22 = (char *)var_2(0,var_22,5);
      var_3(var_22);
      return 0;
    }
    var_18 = var_10(var_17,var_9,var_15,(type_8 *)arch->file);
    var_11 = (size_t)arch->index_num;
    var_8 = *(int *)((int)&arch->index_num + 4);
    if (var_18 != var_11 || var_8 != 0) {
      var_19(var_17);
      pcVar10 = arch->file_name;
      var_22 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    var_18 = var_5 - var_11 * var_9;
    var_20 = (type_7 *)var_16(var_11 * 8);
    arch->index_array = var_20;
    if (var_20 == (type_7 *)0x0) {
      var_19(var_17);
      var_22 = "Out of memory whilst trying to convert the archive symbol index\n";
      goto LAB_00012c73;
    }
    if (var_8 != 0 || var_11 != 0) {
      var_5 = 0;
      var_21 = var_17;
      while( true ) {
        var_20 = var_20 + var_5;
        var_5 = var_5 + 1;
        var_13 = var_12(var_21,var_9);
        var_21 = var_21 + var_9;
        *var_20 = var_13;
        piVar1 = (int *)((int)&arch->index_num + 4);
        if (*piVar1 == 0 && (type_3)(var_5 < (type_3)arch->index_num) <= (type_3)-*piVar1) break;
        var_20 = arch->index_array;
      }
    }
    var_19(var_17);
    if (var_18 == 0) {
      pcVar10 = arch->file_name;
      var_22 = "%s: the archive has an index but no symbols\n";
      goto LAB_00012b7d;
    }
    var_22 = (char *)var_16(var_18);
    arch->sym_table = var_22;
    if (var_22 == (char *)0x0) {
      var_22 = "Out of memory whilst trying to read archive index symbol table\n";
      goto LAB_00012c73;
    }
    arch->sym_size = var_18;
    var_11 = var_10(var_22,1,var_18,(type_8 *)arch->file);
    if (var_18 != var_11) {
      pcVar10 = arch->file_name;
      var_22 = "%s: failed to read archive index symbol table\n";
      goto LAB_00012b7d;
    }
  }
  var_11 = var_10(&arch->arhdr,1,0x3c,(type_8 *)arch->file);
  if ((var_11 == 0x3c) || (var_11 == 0)) {
    return 1;
  }
  pcVar10 = arch->file_name;
  var_22 = "%s: failed to read archive header following archive index\n";
LAB_00012b7d:
  var_22 = (char *)var_2(0,var_22,5);
  var_3(var_22,pcVar10);
  return 0;
}


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

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

undefined4 __regparm3 MASKED(undefined4 *param_1,uint param_2,int param_3)

{
  undefined1 uVar1;
  longlong lVar2;
  ulong uVar3;
  size_t sVar4;
  uint __n;
  void *pvVar5;
  size_t sVar6;
  void *pvVar7;
  int iVar8;
  char *pcVar9;
  undefined4 uVar10;
  undefined4 uVar11;
  int iVar12;
  void *pvVar13;
  uint uVar14;
  ulonglong uVar15;
  undefined8 uVar16;
  undefined1 local_24 [16];
  undefined4 uStack_14;
  
  uStack_14 = 0x12920;
  uVar1 = *(undefined1 *)((int)param_1 + 0x6e);
  *(undefined1 *)((int)param_1 + 0x6e) = 0;
  uVar3 = strtoul((char *)(param_1 + 0x19),(char **)0x0,10);
  *(undefined1 *)((int)param_1 + 0x6e) = uVar1;
  if ((int)uVar3 < 0) {
    uVar11 = *param_1;
    uVar10 = dcgettext(0,"%s: invalid archive header size: %ld\n",5);
    error(uVar10,uVar11,uVar3);
    return 0;
  }
  uVar14 = uVar3 + 1 & 0xfffffffe;
  param_1[10] = uVar14 + 0x3c + param_1[10];
  if (param_3 == 0) {
    iVar8 = fseek((FILE *)param_1[1],uVar14,1);
    if (iVar8 != 0) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to skip archive symbol table\n";
      goto LAB_00012b7d;
    }
  }
  else {
    if (uVar14 < param_2) {
      uVar11 = *param_1;
      pcVar9 = "%s: the archive index is empty\n";
      goto LAB_00012b7d;
    }
    sVar4 = fread(local_24,1,param_2,(FILE *)param_1[1]);
    if (param_2 != sVar4) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    uVar14 = uVar14 - param_2;
    uVar15 = FUN_00012800(local_24,param_2);
    iVar8 = (int)(uVar15 >> 0x20);
    __n = (uint)uVar15;
    *(ulonglong *)(param_1 + 2) = uVar15;
    lVar2 = (uVar15 & 0xffffffff) * (ulonglong)param_2;
    iVar12 = (int)((ulonglong)lVar2 >> 0x20) + iVar8 * param_2;
    if ((iVar12 != 0 || (uint)-iVar12 < (uint)(uVar14 < (uint)lVar2)) ||
       (iVar8 != 0 || (uint)-iVar8 < (uint)(uVar14 < __n))) {
      uVar11 = *param_1;
      uVar10 = dcgettext(0,
                         "%s: the archive index is supposed to have 0x%lx entries of %d bytes, but the size is only 0x%lx\n"
                         ,5);
      error(uVar10,uVar11,__n,param_2,uVar14);
      return 0;
    }
    pvVar5 = malloc(__n * param_2);
    if (pvVar5 == (void *)0x0) {
      pcVar9 = "Out of memory whilst trying to read archive symbol index\n";
LAB_00012c73:
      uVar11 = dcgettext(0,pcVar9,5);
      error(uVar11);
      return 0;
    }
    sVar6 = fread(pvVar5,param_2,__n,(FILE *)param_1[1]);
    sVar4 = param_1[2];
    iVar8 = param_1[3];
    if (sVar6 != sVar4 || iVar8 != 0) {
      free(pvVar5);
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index\n";
      goto LAB_00012b7d;
    }
    sVar6 = uVar14 - sVar4 * param_2;
    pvVar7 = malloc(sVar4 * 8);
    param_1[4] = pvVar7;
    if (pvVar7 == (void *)0x0) {
      free(pvVar5);
      pcVar9 = "Out of memory whilst trying to convert the archive symbol index\n";
      goto LAB_00012c73;
    }
    if (iVar8 != 0 || sVar4 != 0) {
      uVar14 = 0;
      pvVar13 = pvVar5;
      while( true ) {
        iVar8 = uVar14 * 8;
        uVar14 = uVar14 + 1;
        uVar16 = FUN_00012800(pvVar13,param_2);
        pvVar13 = (void *)((int)pvVar13 + param_2);
        *(undefined8 *)((int)pvVar7 + iVar8) = uVar16;
        if (param_1[3] == 0 && (uint)(uVar14 < (uint)param_1[2]) <= (uint)-param_1[3]) break;
        pvVar7 = (void *)param_1[4];
      }
    }
    free(pvVar5);
    if (sVar6 == 0) {
      uVar11 = *param_1;
      pcVar9 = "%s: the archive has an index but no symbols\n";
      goto LAB_00012b7d;
    }
    pvVar5 = malloc(sVar6);
    param_1[5] = pvVar5;
    if (pvVar5 == (void *)0x0) {
      pcVar9 = "Out of memory whilst trying to read archive index symbol table\n";
      goto LAB_00012c73;
    }
    param_1[6] = sVar6;
    sVar4 = fread(pvVar5,1,sVar6,(FILE *)param_1[1]);
    if (sVar6 != sVar4) {
      uVar11 = *param_1;
      pcVar9 = "%s: failed to read archive index symbol table\n";
      goto LAB_00012b7d;
    }
  }
  sVar4 = fread(param_1 + 0xd,1,0x3c,(FILE *)param_1[1]);
  if ((sVar4 == 0x3c) || (sVar4 == 0)) {
    return 1;
  }
  uVar11 = *param_1;
  pcVar9 = "%s: failed to read archive header following archive index\n";
LAB_00012b7d:
  uVar10 = dcgettext(0,pcVar9,5);
  error(uVar10,uVar11);
  return 0;
}

