uint FUN_00483560(ushort *param_1)

{
  byte bVar1;
  ushort uVar2;
  int iVar3;
  byte *pbVar4;
  byte local_10 [8];
  
  if (((*param_1 & 3) != 0) || (iVar3 = FUN_004815b0(), iVar3 == 0)) {
    uVar2 = *param_1;
    if ((uVar2 & 2) != 0) {
      bVar1 = *(byte *)((int)param_1 + (uVar2 & 1) + 2);
      *param_1 = uVar2 - 1;
      *(undefined1 *)((int)param_1 + 3) = 0;
      return (uint)bVar1;
    }
    pbVar4 = *(byte **)(param_1 + 8);
    if (*(byte **)(param_1 + 10) != pbVar4) {
      bVar1 = *pbVar4;
      *(byte **)(param_1 + 8) = pbVar4 + 1;
      return (uint)bVar1;
    }
    if (*(int *)(param_1 + 2) == -2) {
      *param_1 = uVar2 | 4;
    }
    else {
      if ((uVar2 & 0x300) == 0) {
        iVar3 = *(int *)(param_1 + 6);
      }
      else {
        FUN_0048331c(&PTR_DAT_004b76bc);
        iVar3 = *(int *)(param_1 + 6);
      }
      if (iVar3 == *(int *)(param_1 + 4)) {
        iVar3 = FUN_004885e0(param_1,local_10,1);
        if (iVar3 != 0) {
          return (uint)local_10[0];
        }
      }
      else {
        iVar3 = FUN_00488950(param_1);
        if (iVar3 != 0) {
          bVar1 = **(byte **)(param_1 + 8);
          *(byte **)(param_1 + 8) = *(byte **)(param_1 + 8) + 1;
          return (uint)bVar1;
        }
      }
    }
  }
  return 0xffffffff;
}