server-re/decomp/AgentManager_Release_x64/full/functions/0x1400bd430.c
2026-10-15 09:58:24 -04:00

258 lines
11 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400bd430 FUN_1400bd430
* Pseudocode, not original source. */
void FUN_1400bd430(longlong param_1,longlong param_2,int param_3)
{
ushort uVar1;
ushort uVar2;
ushort uVar3;
int iVar4;
byte bVar5;
int iVar6;
ushort *puVar7;
uint uVar8;
uint uVar9;
longlong lVar10;
short sVar11;
int iVar12;
uint uVar14;
longlong lVar15;
int iVar13;
uVar14 = 0xffffffff;
iVar13 = 0;
iVar4 = 7;
iVar6 = 4;
if (*(ushort *)(param_2 + 2) == 0) {
iVar4 = 0x8a;
iVar6 = 3;
}
if (-1 < param_3) {
lVar15 = (longlong)param_3 + 1;
puVar7 = (ushort *)(param_2 + 6);
uVar8 = (uint)*(ushort *)(param_2 + 2);
do {
iVar12 = iVar13 + 1;
lVar10 = (longlong)(int)uVar8;
uVar1 = *puVar7;
uVar9 = (uint)uVar1;
if ((iVar4 <= iVar12) || (uVar8 != uVar9)) {
if (iVar12 < iVar6) {
do {
uVar14 = (uint)*(ushort *)(param_1 + 0xaa6 + lVar10 * 4);
iVar6 = *(int *)(param_1 + 0x1714);
if ((int)(0x10 - uVar14) < iVar6) {
uVar3 = *(ushort *)(param_1 + 0xaa4 + lVar10 * 4);
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f);
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar6 = *(int *)(param_1 + 0x1714) + -0x10;
*(ushort *)(param_1 + 0x1710) =
uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) |
*(short *)(param_1 + 0xaa4 + lVar10 * 4) << ((byte)iVar6 & 0x1f);
}
iVar12 = iVar12 + -1;
*(uint *)(param_1 + 0x1714) = iVar6 + uVar14;
} while (iVar12 != 0);
}
else {
if (uVar8 == 0) {
iVar6 = *(int *)(param_1 + 0x1714);
sVar11 = (short)iVar12;
bVar5 = (byte)iVar6;
if (iVar12 < 0xb) {
uVar3 = *(ushort *)(param_1 + 0xaea);
if ((int)(0x10 - (uint)uVar3) < iVar6) {
uVar2 = *(ushort *)(param_1 + 0xae8);
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar2 << (bVar5 & 0x1f);
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar6 = *(int *)(param_1 + 0x1714) + -0x10;
*(ushort *)(param_1 + 0x1710) =
uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xae8) << (bVar5 & 0x1f);
}
iVar6 = iVar6 + (uint)uVar3;
*(int *)(param_1 + 0x1714) = iVar6;
if (iVar6 < 0xe) {
sVar11 = sVar11 + -3;
iVar4 = iVar6 + 3;
LAB_1400bd93e:
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | sVar11 << ((byte)iVar6 & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | sVar11 - 3U << ((byte)iVar6 & 0x1f);
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar4 = *(int *)(param_1 + 0x1714) + -0xd;
*(ushort *)(param_1 + 0x1710) =
(ushort)(sVar11 - 3U) >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
}
else {
uVar3 = *(ushort *)(param_1 + 0xaee);
if ((int)(0x10 - (uint)uVar3) < iVar6) {
uVar2 = *(ushort *)(param_1 + 0xaec);
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar2 << (bVar5 & 0x1f);
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar6 = *(int *)(param_1 + 0x1714) + -0x10;
*(ushort *)(param_1 + 0x1710) =
uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | *(short *)(param_1 + 0xaec) << (bVar5 & 0x1f);
}
iVar6 = iVar6 + (uint)uVar3;
*(int *)(param_1 + 0x1714) = iVar6;
if (iVar6 < 10) {
sVar11 = sVar11 + -0xb;
iVar4 = iVar6 + 7;
goto LAB_1400bd93e;
}
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | sVar11 - 0xbU << ((byte)iVar6 & 0x1f);
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar4 = *(int *)(param_1 + 0x1714) + -9;
*(ushort *)(param_1 + 0x1710) =
(ushort)(sVar11 - 0xbU) >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
}
else {
if (uVar8 != uVar14) {
uVar14 = (uint)*(ushort *)(param_1 + 0xaa6 + lVar10 * 4);
iVar6 = *(int *)(param_1 + 0x1714);
if ((int)(0x10 - uVar14) < iVar6) {
uVar3 = *(ushort *)(param_1 + 0xaa4 + lVar10 * 4);
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f);
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)
((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar6 = *(int *)(param_1 + 0x1714) + -0x10;
*(ushort *)(param_1 + 0x1710) =
uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) |
*(short *)(param_1 + 0xaa4 + lVar10 * 4) << ((byte)iVar6 & 0x1f);
}
*(uint *)(param_1 + 0x1714) = iVar6 + uVar14;
iVar12 = iVar13;
}
uVar3 = *(ushort *)(param_1 + 0xae6);
iVar6 = *(int *)(param_1 + 0x1714);
if ((int)(0x10 - (uint)uVar3) < iVar6) {
uVar2 = *(ushort *)(param_1 + 0xae4);
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar2 << ((byte)iVar6 & 0x1f);
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10))
= *(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar6 = *(int *)(param_1 + 0x1714) + -0x10;
*(ushort *)(param_1 + 0x1710) =
uVar2 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
else {
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) |
*(short *)(param_1 + 0xae4) << ((byte)iVar6 & 0x1f);
}
iVar6 = iVar6 + (uint)uVar3;
*(int *)(param_1 + 0x1714) = iVar6;
if (iVar6 < 0xf) {
sVar11 = (short)iVar12 + -3;
iVar4 = iVar6 + 2;
goto LAB_1400bd93e;
}
uVar3 = (short)iVar12 - 3;
*(ushort *)(param_1 + 0x1710) =
*(ushort *)(param_1 + 0x1710) | uVar3 << ((byte)iVar6 & 0x1f);
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1710);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
*(undefined1 *)((ulonglong)*(uint *)(param_1 + 0x28) + *(longlong *)(param_1 + 0x10)) =
*(undefined1 *)(param_1 + 0x1711);
*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
iVar4 = *(int *)(param_1 + 0x1714) + -0xe;
*(ushort *)(param_1 + 0x1710) =
uVar3 >> (0x10U - (char)*(int *)(param_1 + 0x1714) & 0x1f);
}
*(int *)(param_1 + 0x1714) = iVar4;
}
uVar14 = uVar8;
iVar12 = 0;
if (uVar1 == 0) {
iVar4 = 0x8a;
iVar6 = 3;
}
else if (uVar8 == uVar9) {
iVar4 = 6;
iVar6 = 3;
}
else {
iVar4 = 7;
iVar6 = 4;
iVar12 = 0;
}
}
iVar13 = iVar12;
puVar7 = puVar7 + 2;
lVar15 = lVar15 + -1;
uVar8 = uVar9;
} while (lVar15 != 0);
}
return;
}