int * FUN_00401fb4(int param_1,int param_2,int param_3,int param_4)
{
bool bVar1;
int *piVar2;
undefined4 *puVar3;
int iVar4;
int *piVar5;
int *piVar6;
int local_58 [16];
piVar2 = DAT_004ba168;
piVar5 = (int *)0x0;
if ((int **)DAT_004ba168 != &DAT_004ba168) {
piVar5 = (int *)DAT_004ba168[1];
iVar4 = *DAT_004ba168;
*piVar5 = iVar4;
*(int **)(iVar4 + 4) = piVar5;
piVar2[2] = 0x102;
*piVar2 = 0;
piVar2[1] = 0;
FUN_0047f250(local_58);
piVar2[3] = param_1 + local_58[0];
piVar2[4] = param_2;
while (999999 < piVar2[4]) {
piVar2[4] = piVar2[4] + -1000000;
piVar2[3] = piVar2[3] + 1;
}
*piVar2 = (int)piVar2;
piVar6 = DAT_004ba190;
piVar2[6] = param_3;
piVar2[5] = param_4;
piVar2[1] = (int)piVar2;
piVar5 = piVar2;
if ((int **)piVar6 == &DAT_004ba190) {
DAT_004ba194 = piVar2;
*piVar2 = (int)&DAT_004ba190;
piVar2[1] = (int)&DAT_004ba190;
DAT_004ba190 = piVar2;
}
else {
do {
bVar1 = piVar2[3] < piVar6[3];
if (piVar2[3] == piVar6[3]) {
bVar1 = piVar2[4] < piVar6[4];
}
} while ((!bVar1) && (piVar6 = (int *)*piVar6, (int **)piVar6 != &DAT_004ba190));
puVar3 = (undefined4 *)piVar6[1];
*piVar2 = (int)piVar6;
piVar6[1] = (int)piVar2;
*puVar3 = piVar2;
piVar2[1] = (int)puVar3;
}
}
return piVar5;
}