/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void __pthread_manager(int param_1)

{
  int iVar1;
  int *piVar2;
  __pid_t _Var3;
  uint uVar4;
  __uid_t _Var5;
  uint uVar6;
  void *pvVar7;
  undefined4 *puVar8;
  undefined4 *puVar9;
  size_t __len;
  void *__addr;
  uint uVar10;
  int iVar11;
  uint uVar12;
  code *pcVar13;
  pollfd local_160;
  sigset_t sStack_158;
  undefined4 *local_d8;
  undefined4 local_d4;
  undefined4 *local_d0;
  int local_cc;
  int local_c8;
  undefined1 auStack_c4 [132];
  int local_40;
  __pid_t local_3c;
  int local_38;
  int local_34;
  pollfd *local_30;
  undefined4 **local_2c;
  
  DAT_0003126c = &DAT_00031270;
  PTR_DAT_00031264 = &DAT_00031268;
  sigfillset(&sStack_158);
  sigdelset(&sStack_158,__pthread_sig_cancel);
  sigdelset(&sStack_158,5);
  if ((__pthread_threads_debug != 0) && (0 < __pthread_sig_debug)) {
    sigdelset(&sStack_158,__pthread_sig_debug);
  }
  sigprocmask(3,&sStack_158,(sigset_t *)0x0);
  __pthread_manager_adjust_prio(*(undefined4 *)(__pthread_main_thread + 0x18));
  do {
    iVar1 = __libc_read(param_1,&local_d8,0x94)   //possible issue identified - semgrep
    if (iVar1 != -1) break;
    piVar2 = __errno_location();
  } while (*piVar2 == 4);
  local_160.events = 1;
  local_30 = &local_160;
  local_2c = &local_d8;
  local_160.fd = param_1;
switchD_00015980_default:
  do {
    iVar1 = poll(local_30,1,2000);
    _Var3 = getppid();
    if (_Var3 == 1) {
      for (puVar8 = *(undefined4 **)__pthread_main_thread;
          puVar8 != (undefined4 *)__pthread_main_thread; puVar8 = (undefined4 *)*puVar8) {
        kill(puVar8[5],9);
      }
      goto LAB_00015f54;
    }
    if (DAT_000317b0 != 0) {
      DAT_000317b0 = 0;
      (*(code *)0x5544)();
    }
  } while ((iVar1 != 1) || ((local_160.revents & 1U) == 0));
  __libc_read(param_1,local_2c,0x94)   //possible issue identified - semgrep
  puVar9 = local_d0;
  puVar8 = local_d8;
  switch(local_d4) {
  case 0:
    uVar4 = getpagesize();
    local_34 = local_cc;
    local_38 = local_c8;
    local_3c = puVar8[5];
    local_40 = puVar8[0x67];
    if (((puVar9 == (undefined4 *)0x0) || (puVar9[1] == 0)) || (_Var5 = geteuid(), _Var5 == 0)) {
      uVar10 = 0x200000 - uVar4;
      uVar12 = 2;
      do {
        if (*(int *)(__pthread_handles + uVar12 * 0x10 + 8) == 0) {
          if ((puVar9 != (undefined4 *)0x0) && (puVar9[6] != 0)) {
            __pthread_nonstandard_stacks = 1;
            iVar1 = puVar9[7] - puVar9[8];
            piVar2 = (int *)((puVar9[7] & 0xfffffffc) - 0x1e0);
            goto LAB_00015b14;
          }
          uVar6 = uVar10;
          if (puVar9 != (undefined4 *)0x0) {
            if (uVar4 == 0) {
              trap(7);
            }
            uVar6 = ((puVar9[8] + -1 + uVar4) / uVar4) * uVar4;
            if (uVar10 < uVar6) {
              uVar6 = uVar10;
            }
          }
          piVar2 = (int *)(__pthread_initial_thread_bos + (1 - uVar12) * 0x200000 + -0x1e0);
          pvVar7 = mmap(piVar2 + (0x78 - ___pagesize),___pagesize << 2,7,0x1812,-1,0);
          if (pvVar7 == (void *)0xffffffff) goto LAB_00015bcc;
          iVar1 = (int)piVar2 + (0x1e0 - uVar6);
          if (uVar6 == uVar10) {
LAB_00015b14:
            __len = 0;
            __addr = (void *)0x0;
          }
          else {
            __len = puVar9[5]   //possible issue identified - semgrep
            __addr = (void *)(iVar1 - __len);
            pvVar7 = mmap(__addr,__len,0,0x10,-1,0);
            if (pvVar7 == (void *)0xffffffff) goto LAB_00015b14;
          }
          memset(piVar2,0,0x1e0)   //possible issue identified - semgrep
          DAT_000317b8 = DAT_000317b8 + 0x400;
          iVar11 = uVar12 + DAT_000317b8;
          __pthread_handles_num = __pthread_handles_num + 1;
          piVar2[0x11] = (int)(piVar2 + 0x12);
          piVar2[0x13] = (int)(piVar2 + 0x14);
          piVar2[99] = (int)__addr;
          piVar2[100] = __len;
          piVar2[4] = iVar11;
          piVar2[7] = (int)(__pthread_handles + uVar12 * 0x10);
          *(undefined1 *)(piVar2 + 0x10) = 0;
          *(undefined1 *)((int)piVar2 + 0x41) = 0;
          piVar2[0x65] = (int)piVar2;
          piVar2[0x66] = uVar12;
          *(int *)(__pthread_handles + uVar12 * 0x10 + 0xc) = iVar1;
          *(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 4) = 0;
          *(undefined4 *)(__pthread_handles + uVar12 * 0x10) = 0;
          *(int **)(__pthread_handles + uVar12 * 0x10 + 8) = piVar2;
          piVar2[0x39] = -1;
          if (puVar9 != (undefined4 *)0x0) {
            *(char *)((int)piVar2 + 0x2d) = (char)*puVar9;
            piVar2[0x62] = puVar9[6];
            if (puVar9[3] == 0) {
              iVar1 = sched_getscheduler(local_3c);
              piVar2[0x39] = iVar1;
              sched_getparam(local_3c,(sched_param *)(piVar2 + 0x3a));
LAB_00015c50:
              iVar1 = piVar2[0x3a];
            }
            else {
              if (puVar9[3] == 1) {
                piVar2[0x39] = puVar9[1];
                memcpy(piVar2 + 0x3a,puVar9 + 2,4)   //possible issue identified - semgrep
                goto LAB_00015c50;
              }
              iVar1 = piVar2[0x3a];
            }
            piVar2[6] = iVar1;
          }
          piVar2[0x17] = local_34;
          piVar2[0x18] = local_38;
          memcpy(piVar2 + 0x19,auStack_c4,0x80)   //possible issue identified - semgrep
          __pthread_manager_adjust_prio(piVar2[6]);
          piVar2[1] = (int)__pthread_main_thread;
          *piVar2 = *(int *)__pthread_main_thread;
          *(int **)(*(int *)__pthread_main_thread + 4) = piVar2;
          *(int **)__pthread_main_thread = piVar2;
          if ((local_40 == 0) || (((__pthread_threads_events | puVar8[0x68]) & 0x80) == 0)) {
LAB_00015d68:
            iVar1 = clone((__fn *)0x5288,piVar2,__pthread_sig_cancel | 0xf00,piVar2);
            if (iVar1 != -1) {
LAB_00015e3c:
              piVar2[5] = iVar1;
              iVar1 = 0;
              puVar8[0xc] = iVar11;
              goto LAB_00015e48;
            }
          }
          else {
            __pthread_lock(piVar2[7],0);
            iVar1 = clone((__fn *)0x53bc,piVar2,__pthread_sig_cancel | 0xf00,piVar2);
            if (iVar1 != -1) {
              piVar2[0x6a] = 8;
              piVar2[0x6b] = (int)piVar2;
              __pthread_last_event = piVar2;
              piVar2[5] = iVar1;
              __linuxthreads_create_event();
              __pthread_unlock(piVar2[7]);
              if (iVar1 == 0) goto LAB_00015d68;
              goto LAB_00015e3c;
            }
          }
          iVar1 = *piVar2;
          *(int *)(iVar1 + 4) = piVar2[1];
          *(int *)piVar2[1] = iVar1;
          if ((puVar9 == (undefined4 *)0x0) || (puVar9[6] == 0)) {
            if (piVar2[100] != 0) {
              munmap((void *)piVar2[99],piVar2[100]);
            }
            munmap(piVar2 + (0x78 - ___pagesize),___pagesize << 2);
          }
          __pthread_handles_num = __pthread_handles_num + -1;
          *(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 0xc) = 0;
          *(undefined4 *)(__pthread_handles + uVar12 * 0x10 + 8) = 0;
          piVar2 = __errno_location();
          iVar1 = *piVar2;
          goto LAB_00015e48;
        }
LAB_00015bcc:
        uVar12 = uVar12 + 1;
      } while (uVar12 < 0x400);
      iVar1 = 0xb;
LAB_00015e48:
      puVar8[0xd] = iVar1;
      puVar8 = local_d8;
    }
    else {
      puVar8[0xd] = 1;
      puVar8 = local_d8;
    }
    break;
  case 1:
    iVar1 = ((uint)local_d0 & 0x3ff) * 0x10;
    puVar8 = (undefined4 *)(__pthread_handles + iVar1);
    __pthread_lock(puVar8,0);
    iVar1 = *(int *)(__pthread_handles + iVar1 + 8);
    if ((iVar1 != 0) && (*(undefined4 **)(iVar1 + 0x10) == puVar9)) {
      if (*(char *)(iVar1 + 0x2e) != '\0') {
        __pthread_unlock(puVar8);
        (*(code *)0x5420)(iVar1);
        goto switchD_00015980_default;
      }
      *(undefined1 *)(iVar1 + 0x2d) = 1;
    }
    pcVar13 = __pthread_unlock;
    goto LAB_00015fa8;
  case 2:
    goto switchD_00015980_caseD_2;
  case 3:
    DAT_000317b4 = 1;
    (*(code *)0x5544)();
    puVar8 = *(undefined4 **)__pthread_main_thread;
    if (*(undefined4 **)__pthread_main_thread != (undefined4 *)__pthread_main_thread)
    goto switchD_00015980_default;
    break;
  case 4:
    pcVar13 = sem_post;
    puVar8 = local_d0;
LAB_00015fa8:
    (*pcVar13)(puVar8);
    goto switchD_00015980_default;
  case 5:
    if ((__pthread_threads_debug != 0) && (0 < __pthread_sig_debug)) {
      raise(__pthread_sig_debug);
    }
  default:
    goto switchD_00015980_default;
  }
  __pthread_restart_new(puVar8);
  goto switchD_00015980_default;
switchD_00015980_caseD_2:
  __pthread_exit_requested = 1;
  __pthread_exit_code = local_d0;
  for (puVar8 = (undefined4 *)*local_d8; puVar8 != local_d8; puVar8 = (undefined4 *)*puVar8) {
    kill(puVar8[5],__pthread_sig_cancel);
  }
  for (puVar9 = (undefined4 *)*puVar8; puVar9 != puVar8; puVar9 = (undefined4 *)*puVar9) {
    waitpid(puVar9[5],(int *)0x0,-0x80000000);
  }
  __pthread_restart_new(puVar9);
LAB_00015f54:
                    /* WARNING: Subroutine does not return */
  _exit(0);
}