Complete decompilation of the retail Asheron's Call client using Ghidra 12.0.4 + pyghidra headless. 22,225 of 22,226 functions successfully decompiled in 75 seconds. Output: docs/research/decompiled/ (54 files, 688,567 lines of C) Key findings already identified: - CLandBlockStruct::ConstructPolygons at chunk_00530000.c:2270 (split direction formula with 0x0CCAC033 constants) - Motion command handlers at chunk_00510000.c (0x45000005 etc) - Motion interpreter at chunk_00520000.c - Portal space UI at chunk_004D0000.c and chunk_00560000.c Next: identify CPhysicsObj, CMotionInterp, collision, and movement functions by cross-referencing against ACE's C# port. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
12255 lines
338 KiB
C
12255 lines
338 KiB
C
// Decompiled from acclient.exe — chunk 0x00670000
|
|
// Ghidra 12.0.4 + pyghidra headless
|
|
|
|
// --- FUN_00670110 at 0x00670110 (size: 930) ---
|
|
|
|
|
|
void FUN_00670110(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int in_EAX;
|
|
|
|
undefined4 uVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
uint uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
int iVar10;
|
|
|
|
int iVar11;
|
|
|
|
uint *puVar12;
|
|
|
|
int iVar13;
|
|
|
|
byte bVar17;
|
|
|
|
ushort uVar14;
|
|
|
|
short sVar15;
|
|
|
|
byte bVar18;
|
|
|
|
byte bVar19;
|
|
|
|
short sVar20;
|
|
|
|
short sVar22;
|
|
|
|
uint5 uVar21;
|
|
|
|
short sVar23;
|
|
|
|
short sVar24;
|
|
|
|
byte bVar26;
|
|
|
|
byte bVar27;
|
|
|
|
ulonglong uVar25;
|
|
|
|
undefined4 local_48;
|
|
|
|
undefined4 local_44;
|
|
|
|
int local_34;
|
|
|
|
int local_30;
|
|
|
|
int local_2c;
|
|
|
|
ulonglong uVar16;
|
|
|
|
|
|
|
|
uVar7 = DAT_008f86b0;
|
|
|
|
local_44 = *(int *)(in_EAX + 8);
|
|
|
|
if (local_44 == 0) {
|
|
|
|
iVar10 = *(int *)(in_EAX + 0x14);
|
|
|
|
bVar17 = *(byte *)(in_EAX + 0x24);
|
|
|
|
local_44 = CONCAT13(bVar17,(int3)DAT_008f86b0);
|
|
|
|
local_30 = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_30 != 0) {
|
|
|
|
iVar5 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar2 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar5 != 0) {
|
|
|
|
iVar13 = iVar5;
|
|
|
|
do {
|
|
|
|
iVar13 = iVar13 + -1;
|
|
|
|
if (bVar17 != 0) {
|
|
|
|
iVar11 = bVar17 + 1;
|
|
|
|
uVar4 = local_44;
|
|
|
|
if (iVar11 != 0x100) {
|
|
|
|
uVar8 = *(uint *)(iVar10 + iVar13 * 4);
|
|
|
|
local_48._3_1_ = (byte)(uVar8 >> 0x18);
|
|
|
|
if (local_48._3_1_ != 0) {
|
|
|
|
bVar18 = (byte)(uVar8 >> 8);
|
|
|
|
bVar19 = (byte)(uVar8 >> 0x10);
|
|
|
|
bVar26 = (byte)(uVar7 >> 8);
|
|
|
|
bVar27 = (byte)(uVar7 >> 0x10);
|
|
|
|
if (local_48._3_1_ == 0xff) {
|
|
|
|
uVar3 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar19,uVar8)) >> 0x20),
|
|
|
|
uVar8) >> 0x18);
|
|
|
|
uVar21 = (uint5)uVar3 & 0xffffffff00;
|
|
|
|
uVar16 = (ulonglong)CONCAT43(uVar3,CONCAT12(bVar18,(ushort)uVar8)) &
|
|
|
|
0xffffffff00ffffff;
|
|
|
|
uVar14 = (ushort)uVar8 & 0xff;
|
|
|
|
uVar25 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14(bVar27,local_44) >> 0x18),
|
|
|
|
CONCAT12(bVar26,(short)uVar7)) >> 0x10,(short)uVar7)
|
|
|
|
& 0xff00ff00ff;
|
|
|
|
sVar24 = (short)iVar11;
|
|
|
|
sVar20 = (short)(uVar16 >> 0x10);
|
|
|
|
sVar22 = (short)(uVar21 >> 8);
|
|
|
|
sVar23 = (short)(uVar21 >> 0x18);
|
|
|
|
sVar15 = uVar14 - (((ushort)(uVar14 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)uVar25 * sVar24) >> 8));
|
|
|
|
sVar20 = sVar20 - (((ushort)(sVar20 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar25 >> 0x10) * sVar24) >> 8));
|
|
|
|
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar25 >> 0x20) * sVar24) >> 8));
|
|
|
|
sVar23 = sVar23 - (((ushort)(sVar23 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar16 >> 0x30) * sVar24) >> 8));
|
|
|
|
uVar4 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)sVar23 -
|
|
|
|
(0xff < sVar23),
|
|
|
|
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
|
|
|
|
(0xff < sVar22),
|
|
|
|
CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
|
|
|
|
(char)sVar20 - (0xff < sVar20),
|
|
|
|
(0 < sVar15) * (sVar15 < 0x100) *
|
|
|
|
(char)sVar15 - (0xff < sVar15))));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar9 = local_48._3_1_ + 1 +
|
|
|
|
(iVar11 - ((int)((local_48._3_1_ + 1) * iVar11) >> 8));
|
|
|
|
local_48._0_1_ = (char)uVar8;
|
|
|
|
local_48 = CONCAT13((char)iVar9 + -1,
|
|
|
|
CONCAT21(CONCAT11(bVar19 - (char)((int)(((uint)bVar19 -
|
|
|
|
(uint)bVar27) *
|
|
|
|
iVar11) / iVar9),
|
|
|
|
bVar18 - (char)((int)(((uint)bVar18 -
|
|
|
|
(uint)bVar26) *
|
|
|
|
iVar11) / iVar9)),
|
|
|
|
(char)local_48 -
|
|
|
|
(char)((int)(((uVar8 & 0xff) - (uVar7 & 0xff)) *
|
|
|
|
iVar11) / iVar9)));
|
|
|
|
uVar4 = local_48;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar10 + iVar13 * 4) = uVar4;
|
|
|
|
}
|
|
|
|
} while (iVar13 != 0);
|
|
|
|
}
|
|
|
|
iVar10 = iVar10 - iVar2;
|
|
|
|
local_30 = local_30 + -1;
|
|
|
|
} while (local_30 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar10 = *(int *)(in_EAX + 0x14);
|
|
|
|
iVar5 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
|
|
|
|
local_2c = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_2c != 0) {
|
|
|
|
iVar2 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar13 = *(int *)(in_EAX + 0xc);
|
|
|
|
iVar11 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
puVar12 = (uint *)(iVar10 + iVar2 * 4);
|
|
|
|
local_34 = iVar2;
|
|
|
|
do {
|
|
|
|
puVar1 = (uint *)((local_44 - iVar10) + -4 + (int)puVar12);
|
|
|
|
puVar12 = puVar12 + -1;
|
|
|
|
uVar7 = *puVar1 & 0xff000000 | DAT_008f86b0;
|
|
|
|
uVar8 = uVar7 >> 0x18;
|
|
|
|
if (iVar5 != 0x100) {
|
|
|
|
uVar8 = (int)(uVar8 * iVar5) >> 8;
|
|
|
|
}
|
|
|
|
if (uVar8 != 0) {
|
|
|
|
iVar9 = uVar8 + 1;
|
|
|
|
if (iVar9 != 0x100) {
|
|
|
|
uVar8 = *puVar12;
|
|
|
|
local_48._3_1_ = (byte)(uVar8 >> 0x18);
|
|
|
|
if (local_48._3_1_ != 0) {
|
|
|
|
bVar17 = (byte)(uVar8 >> 8);
|
|
|
|
bVar18 = (byte)(uVar8 >> 0x10);
|
|
|
|
if (local_48._3_1_ == 0xff) {
|
|
|
|
uVar3 = (uint)(CONCAT34((int3)(CONCAT25(0xff00,CONCAT14(bVar18,uVar8)) >> 0x20),
|
|
|
|
uVar8) >> 0x18);
|
|
|
|
uVar21 = (uint5)uVar3 & 0xffffffff00;
|
|
|
|
uVar16 = (ulonglong)CONCAT43(uVar3,CONCAT12(bVar17,(ushort)uVar8)) &
|
|
|
|
0xffffffff00ffffff;
|
|
|
|
uVar14 = (ushort)uVar8 & 0xff;
|
|
|
|
uVar25 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar7)
|
|
|
|
>> 0x18),
|
|
|
|
CONCAT12((char)(DAT_008f86b0 >> 8),
|
|
|
|
(short)DAT_008f86b0)) >> 0x10,
|
|
|
|
(short)DAT_008f86b0) & 0xff00ff00ff;
|
|
|
|
sVar24 = (short)iVar9;
|
|
|
|
sVar20 = (short)(uVar16 >> 0x10);
|
|
|
|
sVar22 = (short)(uVar21 >> 8);
|
|
|
|
sVar23 = (short)(uVar21 >> 0x18);
|
|
|
|
sVar15 = uVar14 - (((ushort)(uVar14 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)uVar25 * sVar24) >> 8));
|
|
|
|
sVar20 = sVar20 - (((ushort)(sVar20 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar25 >> 0x10) * sVar24) >> 8));
|
|
|
|
sVar22 = sVar22 - (((ushort)(sVar22 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar25 >> 0x20) * sVar24) >> 8));
|
|
|
|
sVar23 = sVar23 - (((ushort)(sVar23 * sVar24) >> 8) -
|
|
|
|
((ushort)((short)(uVar16 >> 0x30) * sVar24) >> 8));
|
|
|
|
uVar7 = CONCAT13((0 < sVar23) * (sVar23 < 0x100) * (char)sVar23 -
|
|
|
|
(0xff < sVar23),
|
|
|
|
CONCAT12((0 < sVar22) * (sVar22 < 0x100) * (char)sVar22 -
|
|
|
|
(0xff < sVar22),
|
|
|
|
CONCAT11((0 < sVar20) * (sVar20 < 0x100) *
|
|
|
|
(char)sVar20 - (0xff < sVar20),
|
|
|
|
(0 < sVar15) * (sVar15 < 0x100) *
|
|
|
|
(char)sVar15 - (0xff < sVar15))));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar6 = local_48._3_1_ + 1 +
|
|
|
|
(iVar9 - ((int)((local_48._3_1_ + 1) * iVar9) >> 8));
|
|
|
|
local_48._0_1_ = (char)uVar8;
|
|
|
|
local_48 = CONCAT31(CONCAT12((char)iVar6 + -1,
|
|
|
|
CONCAT11(bVar18 - (char)((int)(((uint)bVar18 -
|
|
|
|
((DAT_008f86b0 &
|
|
|
|
0xff0000) >> 0x10))
|
|
|
|
* iVar9) / iVar6),
|
|
|
|
bVar17 - (char)((int)(((uint)bVar17 -
|
|
|
|
((DAT_008f86b0 &
|
|
|
|
0xff00) >> 8)) *
|
|
|
|
iVar9) / iVar6))),
|
|
|
|
(char)local_48 -
|
|
|
|
(char)((int)(((uVar8 & 0xff) - (DAT_008f86b0 & 0xff)) *
|
|
|
|
iVar9) / iVar6));
|
|
|
|
uVar7 = local_48;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*puVar12 = uVar7;
|
|
|
|
}
|
|
|
|
local_34 = local_34 + -1;
|
|
|
|
} while (local_34 != 0);
|
|
|
|
}
|
|
|
|
local_44 = local_44 + iVar13;
|
|
|
|
iVar10 = iVar10 + iVar11;
|
|
|
|
local_2c = local_2c + -1;
|
|
|
|
} while (local_2c != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006704c0 at 0x006704C0 (size: 588) ---
|
|
|
|
|
|
void FUN_006704c0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
byte bVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int in_EAX;
|
|
|
|
uint uVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
int iVar10;
|
|
|
|
int iVar11;
|
|
|
|
uint *puVar12;
|
|
|
|
ushort uVar13;
|
|
|
|
short sVar14;
|
|
|
|
short sVar15;
|
|
|
|
short sVar16;
|
|
|
|
short sVar17;
|
|
|
|
ushort uVar19;
|
|
|
|
ulonglong uVar18;
|
|
|
|
undefined4 local_30;
|
|
|
|
int local_24;
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
|
|
|
|
uVar6 = DAT_008f86b0;
|
|
|
|
local_30 = *(int *)(in_EAX + 8);
|
|
|
|
iVar10 = *(int *)(in_EAX + 0x14);
|
|
|
|
if (local_30 == 0) {
|
|
|
|
bVar2 = *(byte *)(in_EAX + 0x24);
|
|
|
|
local_30 = CONCAT13(bVar2,(int3)DAT_008f86b0);
|
|
|
|
local_1c = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_1c != 0) {
|
|
|
|
iVar11 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar11 != 0) {
|
|
|
|
iVar9 = iVar11;
|
|
|
|
do {
|
|
|
|
iVar9 = iVar9 + -1;
|
|
|
|
if (bVar2 != 0) {
|
|
|
|
sVar14 = bVar2 + 1;
|
|
|
|
uVar7 = local_30;
|
|
|
|
if (sVar14 != 0x100) {
|
|
|
|
uVar7 = *(undefined4 *)(iVar10 + iVar9 * 4);
|
|
|
|
uVar13 = (ushort)uVar7 & 0xff;
|
|
|
|
uVar18 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar6 >> 0x10),local_30) >> 0x18)
|
|
|
|
,CONCAT12((char)(uVar6 >> 8),(short)uVar6)) >> 0x10,
|
|
|
|
(short)uVar6) & 0xff00ff00ff;
|
|
|
|
uVar19 = (ushort)(byte)((uint)uVar7 >> 8);
|
|
|
|
sVar17 = (short)CONCAT21(0xff00,(char)((uint)uVar7 >> 0x10));
|
|
|
|
sVar15 = uVar13 - (((ushort)(uVar13 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)uVar18 * sVar14) >> 8));
|
|
|
|
sVar16 = uVar19 - (((ushort)(uVar19 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x10) * sVar14) >> 8));
|
|
|
|
sVar17 = sVar17 - (((ushort)(sVar17 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x20) * sVar14) >> 8));
|
|
|
|
sVar14 = 0xff - (((ushort)(sVar14 * 0xff) >> 8) - ((ushort)(sVar14 * 0xff) >> 8));
|
|
|
|
uVar7 = CONCAT13((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14),
|
|
|
|
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
|
|
|
|
(0xff < sVar17),
|
|
|
|
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15))));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar10 + iVar9 * 4) = uVar7;
|
|
|
|
}
|
|
|
|
} while (iVar9 != 0);
|
|
|
|
}
|
|
|
|
iVar10 = iVar10 - iVar3;
|
|
|
|
local_1c = local_1c + -1;
|
|
|
|
} while (local_1c != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar11 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
|
|
|
|
local_18 = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_18 != 0) {
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar9 = *(int *)(in_EAX + 0xc);
|
|
|
|
iVar4 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
puVar12 = (uint *)(iVar10 + iVar3 * 4);
|
|
|
|
local_24 = iVar3;
|
|
|
|
do {
|
|
|
|
puVar1 = (uint *)((int)puVar12 + (local_30 - iVar10) + -4);
|
|
|
|
puVar12 = puVar12 + -1;
|
|
|
|
uVar8 = *puVar1 & 0xff000000 | DAT_008f86b0;
|
|
|
|
uVar6 = uVar8 >> 0x18;
|
|
|
|
if (iVar11 != 0x100) {
|
|
|
|
uVar6 = (int)(uVar6 * iVar11) >> 8;
|
|
|
|
}
|
|
|
|
if (uVar6 != 0) {
|
|
|
|
if (uVar6 + 1 != 0x100) {
|
|
|
|
uVar5 = *puVar12;
|
|
|
|
uVar13 = (ushort)uVar5 & 0xff;
|
|
|
|
uVar18 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar8) >>
|
|
|
|
0x18),
|
|
|
|
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
|
|
|
|
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
|
|
|
|
sVar17 = (short)(uVar6 + 1);
|
|
|
|
uVar19 = (ushort)(byte)(uVar5 >> 8);
|
|
|
|
sVar16 = (short)CONCAT21(0xff00,(char)(uVar5 >> 0x10));
|
|
|
|
sVar14 = uVar13 - (((ushort)(uVar13 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)uVar18 * sVar17) >> 8));
|
|
|
|
sVar15 = uVar19 - (((ushort)(uVar19 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
|
|
|
|
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
|
|
|
|
sVar17 = 0xff - (((ushort)(sVar17 * 0xff) >> 8) - ((ushort)(sVar17 * 0xff) >> 8));
|
|
|
|
uVar8 = CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17),
|
|
|
|
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15),
|
|
|
|
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
|
|
|
|
(0xff < sVar14))));
|
|
|
|
}
|
|
|
|
*puVar12 = uVar8;
|
|
|
|
}
|
|
|
|
local_24 = local_24 + -1;
|
|
|
|
} while (local_24 != 0);
|
|
|
|
}
|
|
|
|
local_30 = local_30 + iVar9;
|
|
|
|
iVar10 = iVar10 + iVar4;
|
|
|
|
local_18 = local_18 + -1;
|
|
|
|
} while (local_18 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670710 at 0x00670710 (size: 588) ---
|
|
|
|
|
|
void FUN_00670710(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
byte bVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int in_EAX;
|
|
|
|
uint uVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
int iVar10;
|
|
|
|
int iVar11;
|
|
|
|
uint *puVar12;
|
|
|
|
ushort uVar13;
|
|
|
|
short sVar14;
|
|
|
|
short sVar15;
|
|
|
|
short sVar16;
|
|
|
|
short sVar17;
|
|
|
|
ushort uVar19;
|
|
|
|
ulonglong uVar18;
|
|
|
|
undefined4 local_30;
|
|
|
|
int local_24;
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
|
|
|
|
uVar6 = DAT_008f86b0;
|
|
|
|
local_30 = *(int *)(in_EAX + 8);
|
|
|
|
iVar10 = *(int *)(in_EAX + 0x14);
|
|
|
|
if (local_30 == 0) {
|
|
|
|
bVar2 = *(byte *)(in_EAX + 0x24);
|
|
|
|
local_30 = CONCAT13(bVar2,(int3)DAT_008f86b0);
|
|
|
|
local_1c = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_1c != 0) {
|
|
|
|
iVar11 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar11 != 0) {
|
|
|
|
iVar9 = iVar11;
|
|
|
|
do {
|
|
|
|
iVar9 = iVar9 + -1;
|
|
|
|
if (bVar2 != 0) {
|
|
|
|
sVar14 = bVar2 + 1;
|
|
|
|
uVar7 = local_30;
|
|
|
|
if (sVar14 != 0x100) {
|
|
|
|
uVar7 = *(undefined4 *)(iVar10 + iVar9 * 4);
|
|
|
|
uVar13 = (ushort)uVar7 & 0xff;
|
|
|
|
uVar18 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar6 >> 0x10),local_30) >> 0x18)
|
|
|
|
,CONCAT12((char)(uVar6 >> 8),(short)uVar6)) >> 0x10,
|
|
|
|
(short)uVar6) & 0xff00ff00ff;
|
|
|
|
uVar19 = (ushort)(byte)((uint)uVar7 >> 8);
|
|
|
|
sVar17 = (short)CONCAT21(0xff00,(char)((uint)uVar7 >> 0x10));
|
|
|
|
sVar15 = uVar13 - (((ushort)(uVar13 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)uVar18 * sVar14) >> 8));
|
|
|
|
sVar16 = uVar19 - (((ushort)(uVar19 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x10) * sVar14) >> 8));
|
|
|
|
sVar17 = sVar17 - (((ushort)(sVar17 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x20) * sVar14) >> 8));
|
|
|
|
sVar14 = 0xff - (((ushort)(sVar14 * 0xff) >> 8) - ((ushort)(sVar14 * 0xff) >> 8));
|
|
|
|
uVar7 = CONCAT13((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 - (0xff < sVar14),
|
|
|
|
CONCAT12((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 -
|
|
|
|
(0xff < sVar17),
|
|
|
|
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15))));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar10 + iVar9 * 4) = uVar7;
|
|
|
|
}
|
|
|
|
} while (iVar9 != 0);
|
|
|
|
}
|
|
|
|
iVar10 = iVar10 - iVar3;
|
|
|
|
local_1c = local_1c + -1;
|
|
|
|
} while (local_1c != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar11 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
|
|
|
|
local_18 = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_18 != 0) {
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar9 = *(int *)(in_EAX + 0xc);
|
|
|
|
iVar4 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
puVar12 = (uint *)(iVar10 + iVar3 * 4);
|
|
|
|
local_24 = iVar3;
|
|
|
|
do {
|
|
|
|
puVar1 = (uint *)((local_30 - iVar10) + -4 + (int)puVar12);
|
|
|
|
puVar12 = puVar12 + -1;
|
|
|
|
uVar8 = *puVar1 & 0xff000000 | DAT_008f86b0;
|
|
|
|
uVar6 = uVar8 >> 0x18;
|
|
|
|
if (iVar11 != 0x100) {
|
|
|
|
uVar6 = (int)(uVar6 * iVar11) >> 8;
|
|
|
|
}
|
|
|
|
if (uVar6 != 0) {
|
|
|
|
if (uVar6 + 1 != 0x100) {
|
|
|
|
uVar5 = *puVar12;
|
|
|
|
uVar13 = (ushort)uVar5 & 0xff;
|
|
|
|
uVar18 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),uVar8) >>
|
|
|
|
0x18),
|
|
|
|
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
|
|
|
|
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
|
|
|
|
sVar17 = (short)(uVar6 + 1);
|
|
|
|
uVar19 = (ushort)(byte)(uVar5 >> 8);
|
|
|
|
sVar16 = (short)CONCAT21(0xff00,(char)(uVar5 >> 0x10));
|
|
|
|
sVar14 = uVar13 - (((ushort)(uVar13 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)uVar18 * sVar17) >> 8));
|
|
|
|
sVar15 = uVar19 - (((ushort)(uVar19 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x10) * sVar17) >> 8));
|
|
|
|
sVar16 = sVar16 - (((ushort)(sVar16 * sVar17) >> 8) -
|
|
|
|
((ushort)((short)(uVar18 >> 0x20) * sVar17) >> 8));
|
|
|
|
sVar17 = 0xff - (((ushort)(sVar17 * 0xff) >> 8) - ((ushort)(sVar17 * 0xff) >> 8));
|
|
|
|
uVar8 = CONCAT13((0 < sVar17) * (sVar17 < 0x100) * (char)sVar17 - (0xff < sVar17),
|
|
|
|
CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15),
|
|
|
|
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
|
|
|
|
(0xff < sVar14))));
|
|
|
|
}
|
|
|
|
*puVar12 = uVar8;
|
|
|
|
}
|
|
|
|
local_24 = local_24 + -1;
|
|
|
|
} while (local_24 != 0);
|
|
|
|
}
|
|
|
|
local_30 = local_30 + iVar9;
|
|
|
|
iVar10 = iVar10 + iVar4;
|
|
|
|
local_18 = local_18 + -1;
|
|
|
|
} while (local_18 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670960 at 0x00670960 (size: 696) ---
|
|
|
|
|
|
void FUN_00670960(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
byte bVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
ushort uVar6;
|
|
|
|
ushort uVar7;
|
|
|
|
int in_EAX;
|
|
|
|
uint uVar8;
|
|
|
|
byte *pbVar9;
|
|
|
|
int iVar10;
|
|
|
|
byte *pbVar11;
|
|
|
|
int iVar12;
|
|
|
|
int iVar13;
|
|
|
|
short sVar14;
|
|
|
|
short sVar15;
|
|
|
|
short sVar16;
|
|
|
|
ulonglong uVar17;
|
|
|
|
uint local_30;
|
|
|
|
undefined4 local_2c;
|
|
|
|
int local_20;
|
|
|
|
int local_1c;
|
|
|
|
|
|
|
|
uVar8 = DAT_008f86b0;
|
|
|
|
local_2c = *(int *)(in_EAX + 8);
|
|
|
|
if (local_2c == 0) {
|
|
|
|
bVar2 = *(byte *)(in_EAX + 0x24);
|
|
|
|
iVar12 = *(int *)(in_EAX + 0x14);
|
|
|
|
local_2c = CONCAT13(bVar2,(int3)DAT_008f86b0);
|
|
|
|
local_1c = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_1c != 0) {
|
|
|
|
iVar10 = *(int *)(in_EAX + 0x18);
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x1c);
|
|
|
|
do {
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
pbVar9 = (byte *)(iVar3 * 3 + 2 + iVar12);
|
|
|
|
local_20 = iVar3;
|
|
|
|
do {
|
|
|
|
pbVar11 = pbVar9 + -3;
|
|
|
|
if (bVar2 != 0) {
|
|
|
|
sVar14 = bVar2 + 1;
|
|
|
|
if (sVar14 == 0x100) {
|
|
|
|
local_30 = local_2c;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar7 = *(ushort *)(pbVar9 + -5);
|
|
|
|
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
|
|
|
|
uVar17 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(uVar8 >> 0x10),local_2c) >> 0x18)
|
|
|
|
,CONCAT12((char)(uVar8 >> 8),(short)uVar8)) >> 0x10,
|
|
|
|
(short)uVar8) & 0xff00ff00ff;
|
|
|
|
sVar16 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar7 >> 8),uVar7)) >> 0x10);
|
|
|
|
uVar6 = uVar6 >> 8;
|
|
|
|
sVar15 = (uVar7 & 0xff) -
|
|
|
|
(((ushort)((uVar7 & 0xff) * sVar14) >> 8) -
|
|
|
|
((ushort)((short)uVar17 * sVar14) >> 8));
|
|
|
|
sVar16 = sVar16 - (((ushort)(sVar16 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar17 >> 0x10) * sVar14) >> 8));
|
|
|
|
sVar14 = uVar6 - (((ushort)(uVar6 * sVar14) >> 8) -
|
|
|
|
((ushort)((short)(uVar17 >> 0x20) * sVar14) >> 8));
|
|
|
|
local_30 = (uint)CONCAT12((0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
|
|
|
|
(0xff < sVar14),
|
|
|
|
CONCAT11((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
(0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15)));
|
|
|
|
}
|
|
|
|
pbVar9[-5] = (byte)local_30;
|
|
|
|
pbVar9[-4] = (byte)(local_30 >> 8);
|
|
|
|
*pbVar11 = (byte)(local_30 >> 0x10);
|
|
|
|
}
|
|
|
|
local_20 = local_20 + -1;
|
|
|
|
pbVar9 = pbVar11;
|
|
|
|
} while (local_20 != 0);
|
|
|
|
}
|
|
|
|
iVar12 = iVar12 - iVar10;
|
|
|
|
local_1c = local_1c + -1;
|
|
|
|
} while (local_1c != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar12 = *(int *)(in_EAX + 0x14);
|
|
|
|
iVar10 = (uint)*(byte *)(in_EAX + 0x24) + (uint)(*(byte *)(in_EAX + 0x24) != 0);
|
|
|
|
local_20 = *(int *)(in_EAX + 0x20);
|
|
|
|
if (local_20 != 0) {
|
|
|
|
iVar3 = *(int *)(in_EAX + 0x1c);
|
|
|
|
iVar4 = *(int *)(in_EAX + 0xc);
|
|
|
|
iVar5 = *(int *)(in_EAX + 0x18);
|
|
|
|
do {
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
pbVar9 = (byte *)(iVar3 * 3 + 2 + iVar12);
|
|
|
|
iVar13 = iVar3;
|
|
|
|
do {
|
|
|
|
iVar1 = iVar13 * 4;
|
|
|
|
iVar13 = iVar13 + -1;
|
|
|
|
local_30 = *(uint *)(local_2c + -4 + iVar1) & 0xff000000 | DAT_008f86b0;
|
|
|
|
pbVar11 = pbVar9 + -3;
|
|
|
|
uVar8 = local_30 >> 0x18;
|
|
|
|
if (iVar10 != 0x100) {
|
|
|
|
uVar8 = (int)(uVar8 * iVar10) >> 8;
|
|
|
|
}
|
|
|
|
if (uVar8 != 0) {
|
|
|
|
if (uVar8 + 1 != 0x100) {
|
|
|
|
uVar7 = *(ushort *)(pbVar9 + -5);
|
|
|
|
uVar6 = (ushort)(((uint5)*pbVar11 << 0x20) >> 0x18);
|
|
|
|
uVar17 = (ulonglong)
|
|
|
|
CONCAT52(CONCAT23((short)(CONCAT14((char)(DAT_008f86b0 >> 0x10),local_30)
|
|
|
|
>> 0x18),
|
|
|
|
CONCAT12((char)(DAT_008f86b0 >> 8),(short)DAT_008f86b0))
|
|
|
|
>> 0x10,(short)DAT_008f86b0) & 0xff00ff00ff;
|
|
|
|
sVar16 = (short)(uVar8 + 1);
|
|
|
|
sVar15 = (short)(CONCAT23(uVar6,CONCAT12((char)(uVar7 >> 8),uVar7)) >> 0x10);
|
|
|
|
uVar6 = uVar6 >> 8;
|
|
|
|
sVar14 = (uVar7 & 0xff) -
|
|
|
|
(((ushort)((uVar7 & 0xff) * sVar16) >> 8) -
|
|
|
|
((ushort)((short)uVar17 * sVar16) >> 8));
|
|
|
|
sVar15 = sVar15 - (((ushort)(sVar15 * sVar16) >> 8) -
|
|
|
|
((ushort)((short)(uVar17 >> 0x10) * sVar16) >> 8));
|
|
|
|
sVar16 = uVar6 - (((ushort)(uVar6 * sVar16) >> 8) -
|
|
|
|
((ushort)((short)(uVar17 >> 0x20) * sVar16) >> 8));
|
|
|
|
local_30 = (uint)CONCAT12((0 < sVar16) * (sVar16 < 0x100) * (char)sVar16 -
|
|
|
|
(0xff < sVar16),
|
|
|
|
CONCAT11((0 < sVar15) * (sVar15 < 0x100) * (char)sVar15 -
|
|
|
|
(0xff < sVar15),
|
|
|
|
(0 < sVar14) * (sVar14 < 0x100) * (char)sVar14 -
|
|
|
|
(0xff < sVar14)));
|
|
|
|
}
|
|
|
|
pbVar9[-5] = (byte)local_30;
|
|
|
|
pbVar9[-4] = (byte)(local_30 >> 8);
|
|
|
|
*pbVar11 = (byte)(local_30 >> 0x10);
|
|
|
|
}
|
|
|
|
pbVar9 = pbVar11;
|
|
|
|
} while (iVar13 != 0);
|
|
|
|
}
|
|
|
|
local_2c = local_2c + iVar4;
|
|
|
|
iVar12 = iVar12 + iVar5;
|
|
|
|
local_20 = local_20 + -1;
|
|
|
|
} while (local_20 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670e60 at 0x00670E60 (size: 17) ---
|
|
|
|
|
|
void __fastcall FUN_00670e60(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007febfc;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670e80 at 0x00670E80 (size: 20) ---
|
|
|
|
|
|
void __thiscall FUN_00670e80(int param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(undefined4 *)(param_1 + 8) = param_2;
|
|
|
|
*(undefined4 *)(param_1 + 4) = param_2;
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = param_3;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670eb0 at 0x00670EB0 (size: 15) ---
|
|
|
|
|
|
void __fastcall FUN_00670eb0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007febfc;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670f20 at 0x00670F20 (size: 157) ---
|
|
|
|
|
|
void __fastcall FUN_00670f20(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
bool bVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (*(char *)(param_1 + 0x10) == '\0') {
|
|
|
|
if (*(size_t *)(param_1 + 0xc) != 0) {
|
|
|
|
qsort(*(void **)(param_1 + 4),*(size_t *)(param_1 + 0xc),4,(_PtFuncCompare *)&LAB_00670ef0);
|
|
|
|
bVar1 = false;
|
|
|
|
uVar2 = *(uint *)(param_1 + 0xc) - 1;
|
|
|
|
if (1 < *(uint *)(param_1 + 0xc)) {
|
|
|
|
do {
|
|
|
|
if (*(int *)(*(int *)(param_1 + 4) + uVar2 * 4) ==
|
|
|
|
*(int *)(*(int *)(param_1 + 4) + -4 + uVar2 * 4)) {
|
|
|
|
if (uVar2 < *(uint *)(param_1 + 0xc)) {
|
|
|
|
uVar3 = *(uint *)(param_1 + 0xc) - 1;
|
|
|
|
*(uint *)(param_1 + 0xc) = uVar3;
|
|
|
|
if (uVar2 != uVar3) {
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 4) + uVar2 * 4) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 4) + uVar3 * 4);
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 4) + *(int *)(param_1 + 0xc) * 4) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bVar1 = true;
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 - 1;
|
|
|
|
} while (uVar2 != 0);
|
|
|
|
if (bVar1) {
|
|
|
|
qsort(*(void **)(param_1 + 4),*(size_t *)(param_1 + 0xc),4,(_PtFuncCompare *)&LAB_00670ef0
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670fc0 at 0x00670FC0 (size: 24) ---
|
|
|
|
|
|
void __fastcall FUN_00670fc0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007fec04;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 4) = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00670fe0 at 0x00670FE0 (size: 91) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_00670fe0(int *param_1,uint param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
uVar2 = param_2;
|
|
|
|
if (param_3 == '\0') {
|
|
|
|
uVar2 = FUN_00453850(param_2);
|
|
|
|
}
|
|
|
|
cVar1 = FUN_004180a0(uVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar2 = param_2;
|
|
|
|
if (param_2 < (uint)param_1[2]) {
|
|
|
|
do {
|
|
|
|
*(undefined4 *)(*param_1 + uVar2 * 4) = 0;
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_1[2] = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671280 at 0x00671280 (size: 65) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00671280(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
|
|
|
|
*(undefined1 *)(param_1 + 0x10) = 0;
|
|
|
|
uVar2 = *(uint *)(param_1 + 8) & 0x7fffffff;
|
|
|
|
if (uVar2 <= *(uint *)(param_1 + 0xc)) {
|
|
|
|
uVar3 = FUN_00453850(uVar2 + 1);
|
|
|
|
cVar1 = FUN_004180a0(uVar3);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 4) + *(int *)(param_1 + 0xc) * 4) = param_2;
|
|
|
|
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006712d0 at 0x006712D0 (size: 66) ---
|
|
|
|
|
|
void __fastcall FUN_006712d0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0xb) = 0;
|
|
|
|
*param_1 = 0x5442;
|
|
|
|
param_1[0xc] = DAT_008f86b4;
|
|
|
|
param_1[0xd] = 0xffffffff;
|
|
|
|
param_1[0xe] = 0xffffffff;
|
|
|
|
FUN_00413960();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671320 at 0x00671320 (size: 18) ---
|
|
|
|
|
|
undefined4 FUN_00671320(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00413980();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671360 at 0x00671360 (size: 61) ---
|
|
|
|
|
|
char __fastcall FUN_00671360(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
|
|
|
|
cVar2 = '\0';
|
|
|
|
if (*(char *)(param_1 + 4) != '\0') {
|
|
|
|
if (*(char *)(param_1 + 5) == '\0') {
|
|
|
|
FUN_00673220();
|
|
|
|
}
|
|
|
|
iVar1 = FUN_00674e50();
|
|
|
|
cVar2 = '\x01' - (iVar1 != 0);
|
|
|
|
FUN_00672f60();
|
|
|
|
*(undefined1 *)(param_1 + 4) = 0;
|
|
|
|
}
|
|
|
|
return cVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006713b0 at 0x006713B0 (size: 45) ---
|
|
|
|
|
|
void __thiscall FUN_006713b0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(char *)(param_1 + 5) == '\0') {
|
|
|
|
FUN_004139a0(param_2);
|
|
|
|
if (*(char *)(param_1 + 4) != '\0') {
|
|
|
|
FUN_00673220();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006713e0 at 0x006713E0 (size: 84) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_006713e0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00413980();
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 0xb) = 0;
|
|
|
|
*param_1 = 0x5442;
|
|
|
|
param_1[0xc] = DAT_008f86b4;
|
|
|
|
param_1[0xd] = 0xffffffff;
|
|
|
|
param_1[0xe] = 0xffffffff;
|
|
|
|
FUN_00413960();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671440 at 0x00671440 (size: 107) ---
|
|
|
|
|
|
void FUN_00671440(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
iVar1 = FUN_00406d80();
|
|
|
|
iVar2 = FUN_00406d80();
|
|
|
|
if (iVar2 == iVar1 + 4) {
|
|
|
|
iVar1 = FUN_00406db0();
|
|
|
|
FUN_004074b0(iVar1 + 4,1);
|
|
|
|
iVar1 = FUN_00406db0();
|
|
|
|
uVar3 = FUN_00407140(local_c,0,iVar1 + 4);
|
|
|
|
FUN_004070d0(uVar3);
|
|
|
|
FUN_00406f90();
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671730 at 0x00671730 (size: 80) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00671730(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0x704);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x71c);
|
|
|
|
while (iVar2 <= param_2 / (iVar1 + -4) + 0x33) {
|
|
|
|
if (*(char *)(param_1 + 6) == '\0') {
|
|
|
|
FUN_00674b70();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00675040(0x100000);
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x71c);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671780 at 0x00671780 (size: 73) ---
|
|
|
|
|
|
uint __thiscall FUN_00671780(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_14 = DAT_008f86b4;
|
|
|
|
local_18 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x74))(param_2,&DAT_008f86b8,&local_18,2);
|
|
|
|
return -(uint)(cVar1 != '\0') & local_18;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671930 at 0x00671930 (size: 232) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00671930(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 uStack_3c;
|
|
|
|
byte abStack_28 [12];
|
|
|
|
undefined4 uStack_1c;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
uStack_3c = 2;
|
|
|
|
local_14 = DAT_008f86b4;
|
|
|
|
local_18 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
cVar2 = (**(code **)(*param_1 + 0x74))(param_2,&DAT_008f86b8,&local_18);
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
if ((abStack_28[0] & 1) == 0) {
|
|
|
|
return uStack_1c;
|
|
|
|
}
|
|
|
|
uStack_3c = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004074b0(8,1);
|
|
|
|
FUN_00406db0();
|
|
|
|
cVar2 = (**(code **)(*param_1 + 0x74))(param_2,&uStack_3c,abStack_28,5);
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
iVar3 = FUN_00406d80();
|
|
|
|
uVar1 = *(undefined4 *)(iVar3 + 4);
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
}
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671b60 at 0x00671B60 (size: 331) ---
|
|
|
|
|
|
undefined4 FUN_00671b60(undefined4 param_1,int param_2,byte *param_3,byte param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
byte *pbVar4;
|
|
|
|
bool bVar5;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
int *local_18;
|
|
|
|
undefined1 local_14 [20];
|
|
|
|
|
|
|
|
local_20 = 0;
|
|
|
|
puVar2 = (undefined4 *)FUN_006747a0(param_1,&local_20);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
pbVar4 = param_3;
|
|
|
|
for (iVar3 = 6; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*(undefined4 *)pbVar4 = *puVar2;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
pbVar4 = pbVar4 + 4;
|
|
|
|
}
|
|
|
|
if ((param_4 & 2) == 0) {
|
|
|
|
bVar5 = (param_4 & 5) == 5;
|
|
|
|
local_1c = *(undefined4 *)(param_3 + 8);
|
|
|
|
*(uint *)(param_2 + 4) = (uint)*(ushort *)(param_3 + 2);
|
|
|
|
if (!bVar5) {
|
|
|
|
FUN_004074b0(*(int *)(param_3 + 0xc) + 4,1);
|
|
|
|
FUN_00406db0();
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00675480(param_2,local_1c,bVar5);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_00406f90();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (((char)local_18[0x1cb] != '\0') && (*(char *)((int)local_18 + 5) == '\0')) {
|
|
|
|
FUN_00672ea0(param_1);
|
|
|
|
}
|
|
|
|
if ((((*param_3 & 1) != 0) && ((param_4 & 1) == 0)) && (!bVar5)) {
|
|
|
|
FUN_00417600();
|
|
|
|
cVar1 = (**(code **)(*local_18 + 0x88))(param_2,local_14);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_004176a0(&local_1c);
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671d00 at 0x00671D00 (size: 63) ---
|
|
|
|
|
|
uint __thiscall FUN_00671d00(int param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 in_EAX;
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
uVar1 = CONCAT31((int3)((uint)in_EAX >> 8),*(char *)(param_1 + 5));
|
|
|
|
if (*(char *)(param_1 + 5) == '\0') {
|
|
|
|
uVar1 = FUN_006747a0(param_2,0);
|
|
|
|
if ((uVar1 != 0) && ((param_3 == 0 || (*(int *)(uVar1 + 0x14) <= param_3)))) {
|
|
|
|
uVar1 = FUN_00674af0(param_2);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671d80 at 0x00671D80 (size: 254) ---
|
|
|
|
|
|
uint __fastcall FUN_00671d80(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iStack_3c;
|
|
|
|
undefined4 local_38;
|
|
|
|
undefined4 local_34;
|
|
|
|
undefined **ppuStack_2c;
|
|
|
|
undefined4 uStack_28;
|
|
|
|
undefined4 uStack_24;
|
|
|
|
undefined4 uStack_14;
|
|
|
|
undefined4 uStack_10;
|
|
|
|
undefined4 uStack_c;
|
|
|
|
undefined4 *puStack_4;
|
|
|
|
|
|
|
|
local_38 = 0;
|
|
|
|
local_34 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0xc))(DAT_008343b8,&local_38);
|
|
|
|
if ((cVar1 != '\0') && (iStack_3c == 1)) {
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
FUN_00407390(&stack0xffffffb4,4);
|
|
|
|
ppuStack_2c = &PTR_FUN_00793b3c;
|
|
|
|
uStack_28 = 0;
|
|
|
|
uStack_24 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
uStack_14 = 0;
|
|
|
|
uStack_10 = 0;
|
|
|
|
uStack_c = 0;
|
|
|
|
ppuStack_2c = &PTR_FUN_00793b50;
|
|
|
|
FUN_0040b020(&PTR_PTR_008183b8,&stack0xffffffb4);
|
|
|
|
FUN_00406f90();
|
|
|
|
(**(code **)*puStack_4)(&ppuStack_2c);
|
|
|
|
uVar3 = (uint)ppuStack_2c >> 2;
|
|
|
|
FUN_0040b060();
|
|
|
|
FUN_00406f90();
|
|
|
|
uVar2 = FUN_00406f90();
|
|
|
|
return CONCAT31((int3)((uint)uVar2 >> 8),~(byte)uVar3) & 0xffffff01;
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
uVar3 = FUN_00406f90();
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671f80 at 0x00671F80 (size: 85) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00671f80(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 5) = 0;
|
|
|
|
*(undefined1 *)((int)param_1 + 6) = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
*param_1 = &PTR_LAB_007fec68;
|
|
|
|
FUN_00674e20();
|
|
|
|
FUN_00672f10(param_1 + 4);
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
param_1[0x1bf] = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
FUN_006713e0();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00671fe0 at 0x00671FE0 (size: 123) ---
|
|
|
|
|
|
void __fastcall FUN_00671fe0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_LAB_007fec68;
|
|
|
|
if (*(char *)(param_1 + 1) != '\0') {
|
|
|
|
if (*(char *)((int)param_1 + 5) == '\0') {
|
|
|
|
FUN_00673220();
|
|
|
|
}
|
|
|
|
FUN_00674e50();
|
|
|
|
FUN_00672f60();
|
|
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
|
|
}
|
|
|
|
FUN_00695670();
|
|
|
|
puVar2 = (undefined4 *)(param_1[0x1bf] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[0x1bf] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
FUN_00672f60();
|
|
|
|
FUN_00674e40();
|
|
|
|
*param_1 = &PTR_LAB_007fec08;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672060 at 0x00672060 (size: 537) ---
|
|
|
|
|
|
char __thiscall FUN_00672060(int *param_1,uint *param_2,undefined4 *param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int iVar6;
|
|
|
|
char cVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
uVar1 = param_2[1];
|
|
|
|
cVar7 = '\0';
|
|
|
|
local_18 = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
local_14 = *param_3;
|
|
|
|
local_10 = param_3[1];
|
|
|
|
FUN_004070d0(param_3 + 2);
|
|
|
|
uVar8 = param_4 & 7;
|
|
|
|
if (((*(char *)((int)param_1 + 5) != '\0') || (DAT_008f86b4 == uVar1)) ||
|
|
|
|
(*(short *)((int)param_2 + 2) == 0)) goto switchD_00672107_default;
|
|
|
|
*param_2 = *param_2 & 0xfffffffe;
|
|
|
|
if (param_2[4] == 0) {
|
|
|
|
uVar3 = FUN_0040fa90();
|
|
|
|
param_2[4] = uVar3;
|
|
|
|
}
|
|
|
|
switch(uVar8) {
|
|
|
|
case 1:
|
|
|
|
case 5:
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
FUN_00406f90();
|
|
|
|
cVar2 = (**(code **)(*param_1 + 0x84))(param_3,&local_14);
|
|
|
|
if (cVar2 != '\0') goto switchD_00672107_caseD_3;
|
|
|
|
FUN_004176a0(param_3);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
switchD_00672107_caseD_3:
|
|
|
|
*param_2 = *param_2 | 1;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
FUN_00406f90();
|
|
|
|
cVar2 = (**(code **)(*param_1 + 0x88))(param_3,&local_14);
|
|
|
|
if (cVar2 == '\0') goto switchD_00672107_default;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
goto switchD_00672107_default;
|
|
|
|
}
|
|
|
|
uVar3 = FUN_00417640();
|
|
|
|
param_2[3] = uVar3;
|
|
|
|
if ((*param_2 & 1) != 0) {
|
|
|
|
puVar4 = (uint *)FUN_00417620();
|
|
|
|
uVar3 = *puVar4;
|
|
|
|
uVar5 = FUN_00417640();
|
|
|
|
if ((uVar5 < 0x10) || (uVar5 = FUN_00417640(), uVar3 < uVar5)) {
|
|
|
|
switchD_00672107_default:
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (uVar8 != 5) {
|
|
|
|
if ((param_4 & 8) != 0) {
|
|
|
|
FUN_004176a0(&local_14);
|
|
|
|
param_3[1] = (uint)*(ushort *)((int)param_2 + 2);
|
|
|
|
}
|
|
|
|
cVar2 = FUN_00671730(param_2[3]);
|
|
|
|
if (cVar2 == '\0') goto LAB_0067223d;
|
|
|
|
}
|
|
|
|
iVar6 = FUN_006747a0(uVar1,&local_18);
|
|
|
|
if (uVar8 == 5) {
|
|
|
|
param_2[3] = 0xfffffffe;
|
|
|
|
}
|
|
|
|
if (iVar6 == 0) {
|
|
|
|
iVar6 = FUN_00674350(param_2,&local_14);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if ((param_2[5] != 0) && ((int)param_2[5] < *(int *)(iVar6 + 0x14))) {
|
|
|
|
cVar7 = '\x01';
|
|
|
|
goto LAB_0067223d;
|
|
|
|
}
|
|
|
|
param_2[2] = *(uint *)(local_18 + 0x10);
|
|
|
|
iVar6 = FUN_006742c0(local_18,param_2,&local_14);
|
|
|
|
}
|
|
|
|
cVar7 = '\x01' - (iVar6 != 0);
|
|
|
|
LAB_0067223d:
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return cVar7;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006722b0 at 0x006722B0 (size: 277) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_006722b0(int *param_1,uint param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
bool bVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
int local_c;
|
|
|
|
uint local_8;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
if (*(char *)((int)param_1 + 5) != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar5 = 0;
|
|
|
|
if (param_3 == 0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
bVar1 = true;
|
|
|
|
if ((int)param_3 < 0) {
|
|
|
|
uVar4 = DAT_008f86b4;
|
|
|
|
uVar3 = param_3;
|
|
|
|
do {
|
|
|
|
if ((uVar4 != 0) && ((param_3 & 1) == 0)) {
|
|
|
|
bVar1 = false;
|
|
|
|
}
|
|
|
|
uVar3 = uVar3 >> 1;
|
|
|
|
uVar4 = param_3 & 1;
|
|
|
|
} while (uVar3 != 0);
|
|
|
|
}
|
|
|
|
param_2 = param_2 & param_3;
|
|
|
|
if (bVar1) {
|
|
|
|
FUN_00674de0(&local_c,param_2,~param_3 | param_2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00674dc0(&local_c);
|
|
|
|
}
|
|
|
|
uVar2 = 0;
|
|
|
|
if (local_4 != 0) {
|
|
|
|
uVar4 = 0;
|
|
|
|
do {
|
|
|
|
uVar3 = *(uint *)(iVar5 + 4 + local_c);
|
|
|
|
if ((uVar3 & param_3) == param_2) {
|
|
|
|
(**(code **)(*param_1 + 0x14))(uVar3,0);
|
|
|
|
uVar2 = 1;
|
|
|
|
}
|
|
|
|
uVar4 = uVar4 + 1;
|
|
|
|
iVar5 = iVar5 + 0x18;
|
|
|
|
} while (uVar4 < local_4);
|
|
|
|
}
|
|
|
|
if (((local_8 & 0x80000000) == 0x80000000) && (local_c != 0)) {
|
|
|
|
operator_delete__((void *)(local_c + -4));
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006723d0 at 0x006723D0 (size: 530) ---
|
|
|
|
|
|
bool __thiscall FUN_006723d0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
bool bVar2;
|
|
|
|
int iVar3;
|
|
|
|
void *local_18;
|
|
|
|
undefined1 local_14 [4];
|
|
|
|
void *pvStack_10;
|
|
|
|
uint uStack_c;
|
|
|
|
|
|
|
|
if ((char)param_1[1] != '\0') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
*(bool *)((int)param_1 + 5) = ((byte)*(undefined4 *)(param_2 + 0x10) & 4) == 4;
|
|
|
|
*(bool *)((int)param_1 + 6) = ((byte)*(undefined4 *)(param_2 + 0x10) & 2) == 2;
|
|
|
|
if (((byte)*(undefined4 *)(param_2 + 0x10) & 8) == 8) {
|
|
|
|
LAB_006724e5:
|
|
|
|
FUN_006712d0();
|
|
|
|
param_1[0x1c1] = *(int *)(param_2 + 0x18);
|
|
|
|
param_1[0x1c2] = *(int *)(param_2 + 0x14);
|
|
|
|
param_1[0x1c3] = *(int *)(param_2 + 8);
|
|
|
|
param_1[0x1c4] = *(int *)(param_2 + 0xc);
|
|
|
|
*(undefined1 *)(param_1 + 0x1cb) = 0;
|
|
|
|
param_1[0x1cd] = *(int *)(param_2 + 0x1c);
|
|
|
|
param_1[0x1ce] = *(int *)(param_2 + 0x20);
|
|
|
|
iVar3 = FUN_00675780(param_1 + 0x1c0,param_2,param_2 + 4,*(uint *)(param_2 + 0x10) | 8);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
iVar3 = FUN_00672fb0(param_1 + 0x1c0);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
iVar3 = FUN_00674e70();
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
FUN_00670fc0();
|
|
|
|
(**(code **)(*param_1 + 0x2c))(local_14);
|
|
|
|
if ((uStack_c & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(pvStack_10);
|
|
|
|
}
|
|
|
|
goto LAB_006725a9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_18 = (void *)0x0;
|
|
|
|
iVar3 = FUN_00675920(param_1 + 0x1c0,param_2,param_2 + 4,*(undefined4 *)(param_2 + 0x10),
|
|
|
|
&local_18);
|
|
|
|
*(undefined1 *)(param_1 + 0x1cb) = 0;
|
|
|
|
uVar1 = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
bVar2 = false;
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
*(int *)(param_2 + 8) = param_1[0x1c3];
|
|
|
|
*(int *)(param_2 + 0xc) = param_1[0x1c4];
|
|
|
|
if (((-1 < *(int *)(param_2 + 0x1c)) && (*(int *)(param_2 + 0x1c) != param_1[0x1cd])) ||
|
|
|
|
((-1 < *(int *)(param_2 + 0x20) &&
|
|
|
|
((*(char *)(param_2 + 0x24) == '\0' && (*(int *)(param_2 + 0x20) != param_1[0x1ce])))))) {
|
|
|
|
iVar3 = -6;
|
|
|
|
goto LAB_006724bf;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_006730f0(param_1 + 0x1c0);
|
|
|
|
if (iVar3 != 0) goto LAB_006724bf;
|
|
|
|
if (local_18 != (void *)0x0) {
|
|
|
|
iVar3 = FUN_00673fc0(local_18);
|
|
|
|
if (iVar3 != 0) goto LAB_006724bf;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_006724bf:
|
|
|
|
if (((byte)uVar1 & 0x10) == 0x10) {
|
|
|
|
bVar2 = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
operator_delete(local_18);
|
|
|
|
if (bVar2) goto LAB_006724e5;
|
|
|
|
if (iVar3 == 0) goto LAB_006725a9;
|
|
|
|
}
|
|
|
|
FUN_00674e50();
|
|
|
|
LAB_006725a9:
|
|
|
|
param_1[3] = param_1[0x1c4];
|
|
|
|
param_1[2] = param_1[0x1c3];
|
|
|
|
FUN_00402070(param_2);
|
|
|
|
*(bool *)(param_1 + 1) = iVar3 == 0;
|
|
|
|
return iVar3 == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006725f0 at 0x006725F0 (size: 116) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_006725f0(int *param_1,uint param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
uVar3 = param_2;
|
|
|
|
if (param_3 == '\0') {
|
|
|
|
uVar3 = FUN_00453850(param_2);
|
|
|
|
}
|
|
|
|
cVar2 = FUN_0044b740(uVar3);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_2 < (uint)param_1[2]) {
|
|
|
|
puVar4 = (undefined4 *)FUN_0050a140();
|
|
|
|
uVar3 = param_2;
|
|
|
|
do {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*(undefined4 *)(iVar1 + uVar3 * 8) = *puVar4;
|
|
|
|
*(undefined4 *)(iVar1 + 4 + uVar3 * 8) = puVar4[1];
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
} while (uVar3 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
param_1[2] = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672670 at 0x00672670 (size: 215) ---
|
|
|
|
|
|
void FUN_00672670(int *param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
|
|
|
|
piVar2 = param_1;
|
|
|
|
param_1 = (int *)param_1[2];
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
piVar3 = (int *)FUN_0040acf0(4);
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
if ((*(byte *)(param_3 + 4) & 1) == 0) {
|
|
|
|
param_1 = (int *)*piVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*piVar3 = (int)param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((~*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
FUN_006725f0(param_1,1);
|
|
|
|
}
|
|
|
|
iVar6 = 0;
|
|
|
|
if (0 < (int)param_1) {
|
|
|
|
do {
|
|
|
|
puVar1 = (undefined4 *)(*piVar2 + 4 + iVar6 * 8);
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar4 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar4 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_3 + 4) & 1) == 0) {
|
|
|
|
*puVar1 = *puVar4;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar4 = *puVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((~*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
if (param_2 == 2) {
|
|
|
|
LAB_00672703:
|
|
|
|
iVar5 = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar5 = FUN_0041c280(*(undefined4 *)(*piVar2 + 4 + iVar6 * 8));
|
|
|
|
if (iVar5 == 0) {
|
|
|
|
if (param_2 == 1) {
|
|
|
|
iVar5 = 6;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (param_2 == 2) goto LAB_00672703;
|
|
|
|
if (param_2 == 3) {
|
|
|
|
iVar5 = 0x25;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(int *)(*piVar2 + iVar6 * 8) = iVar5;
|
|
|
|
}
|
|
|
|
iVar6 = iVar6 + 1;
|
|
|
|
} while (iVar6 < (int)param_1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006727f0 at 0x006727F0 (size: 25) ---
|
|
|
|
|
|
int * __thiscall FUN_006727f0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*param_2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672810 at 0x00672810 (size: 236) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00672810(int *param_1,int *param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int *piVar2;
|
|
|
|
HANDLE hObject;
|
|
|
|
LONG LVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
piVar2 = param_3;
|
|
|
|
piVar1 = param_2;
|
|
|
|
if (*(int *)(*param_2 + -4) == 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar4 = *(int *)(*param_3 + -4);
|
|
|
|
if (iVar4 == 1) {
|
|
|
|
LAB_00672845:
|
|
|
|
if (*(int *)(*param_1 + -4) == 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
param_2 = param_1;
|
|
|
|
if (iVar4 == 1) goto LAB_00672854;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (*(int *)(*param_1 + -4) != 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (iVar4 == 1) goto LAB_00672845;
|
|
|
|
}
|
|
|
|
param_2 = param_3;
|
|
|
|
LAB_00672854:
|
|
|
|
param_2 = (int *)*param_2;
|
|
|
|
InterlockedIncrement((LONG *)((int)param_2 + -0x10));
|
|
|
|
FUN_0040cc80(¶m_2,piVar1);
|
|
|
|
iVar4 = 0x80;
|
|
|
|
hObject = (HANDLE)(*(code *)PTR_FUN_00837374)(param_2,0x80000000,3,0,3,0x80,0);
|
|
|
|
if (hObject == (HANDLE)0xffffffff) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
CloseHandle(hObject);
|
|
|
|
if (*(int *)(*param_1 + -4) == 1) {
|
|
|
|
FUN_00402070(piVar2);
|
|
|
|
}
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672900 at 0x00672900 (size: 620) ---
|
|
|
|
|
|
char __thiscall FUN_00672900(int *param_1,int param_2,int param_3,undefined *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
char cVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
LONG *lpAddend;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
char local_d;
|
|
|
|
undefined1 auStack_c [4];
|
|
|
|
undefined1 auStack_8 [8];
|
|
|
|
|
|
|
|
if (*(int *)(param_2 + -4) == 1) {
|
|
|
|
puVar6 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(param_3 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_3 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
puVar1 = (undefined *)*param_1;
|
|
|
|
if (puVar1 != PTR_DAT_00818340) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
*param_1 = (int)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
local_d = '\0';
|
|
|
|
if (*(int *)(param_3 + -4) != 1) {
|
|
|
|
local_d = FUN_00672810(¶m_2,¶m_3);
|
|
|
|
if (local_d != '\0') goto LAB_00672b24;
|
|
|
|
}
|
|
|
|
if ((char)param_4 == '\0') goto LAB_00672b24;
|
|
|
|
FUN_00408ec0(0x106);
|
|
|
|
param_4 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
FUN_00408d90(0x105);
|
|
|
|
cVar2 = FUN_0040db30(¶m_4);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
LAB_00672a4b:
|
|
|
|
FUN_00402730(L"PROJECT_DAT");
|
|
|
|
cVar2 = FUN_0040c270(auStack_c,¶m_3);
|
|
|
|
FUN_004011b0();
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
local_d = FUN_00672810(¶m_2,¶m_3);
|
|
|
|
if (local_d != '\0') goto LAB_00672b07;
|
|
|
|
}
|
|
|
|
if ((*(int *)(param_1[1] + -4) != 1) && (*(int *)(param_1[2] + -4) != 1)) {
|
|
|
|
uVar7 = 0x80000002;
|
|
|
|
puVar6 = ¶m_3;
|
|
|
|
uVar4 = FUN_00403350(auStack_8,0);
|
|
|
|
uVar5 = FUN_00403350(auStack_c,0);
|
|
|
|
cVar2 = FUN_0040e2e0(uVar5,uVar4,puVar6,uVar7);
|
|
|
|
FUN_004011b0();
|
|
|
|
FUN_004011b0();
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
local_d = FUN_00672810(¶m_2,¶m_3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar4 = FUN_00403350(auStack_c,0);
|
|
|
|
FUN_00402070(uVar4);
|
|
|
|
FUN_004011b0();
|
|
|
|
local_d = FUN_00672810(¶m_2,¶m_3);
|
|
|
|
if (local_d == '\0') goto LAB_00672a4b;
|
|
|
|
}
|
|
|
|
LAB_00672b07:
|
|
|
|
puVar6 = (undefined4 *)(param_4 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
LAB_00672b24:
|
|
|
|
puVar6 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
puVar6 = (undefined4 *)(param_3 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(param_3 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar6 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar6)(1);
|
|
|
|
}
|
|
|
|
return local_d;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672b70 at 0x00672B70 (size: 121) ---
|
|
|
|
|
|
undefined1 FUN_00672b70(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 uVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
undefined4 uStack_18;
|
|
|
|
undefined4 uStack_14;
|
|
|
|
|
|
|
|
uStack_18 = 0;
|
|
|
|
FUN_00403350(&uStack_14);
|
|
|
|
FUN_00403350(&uStack_18,0);
|
|
|
|
uVar1 = FUN_00672900();
|
|
|
|
uStack_14 = 0x672bb4;
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(param_1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
uStack_14 = 0x672bc4;
|
|
|
|
(*(code *)**(undefined4 **)(param_1 + -0x14))();
|
|
|
|
}
|
|
|
|
uStack_14 = 0x672bd1;
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(param_2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
uStack_14 = 0x672be1;
|
|
|
|
(*(code *)**(undefined4 **)(param_2 + -0x14))();
|
|
|
|
}
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672bf0 at 0x00672BF0 (size: 141) ---
|
|
|
|
|
|
undefined4 FUN_00672bf0(int param_1,int param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
if (param_3 != (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)(param_1 + 0x110 + param_2 * 0x18);
|
|
|
|
for (iVar1 = 6; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*param_3 = *puVar2;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(param_1 + 0x10c) + -1;
|
|
|
|
iVar1 = param_1 + param_2 * 0x18;
|
|
|
|
*(int *)(param_1 + 0x10c) = iVar3;
|
|
|
|
memmove((void *)(iVar1 + 0x110),(void *)(iVar1 + 0x128),(iVar3 - param_2) * 0x18);
|
|
|
|
if (*(int *)(param_1 + 0x14) != 0) {
|
|
|
|
memmove((void *)(param_1 + 0x18 + param_2 * 4),(void *)(param_1 + 0x1c + param_2 * 4),
|
|
|
|
(*(int *)(param_1 + 0x10c) - param_2) * 4);
|
|
|
|
}
|
|
|
|
*(undefined1 *)(param_1 + 4) = 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672c80 at 0x00672C80 (size: 97) ---
|
|
|
|
|
|
void FUN_00672c80(int param_1,undefined4 *param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
memmove((void *)(param_1 + 0x128),(undefined4 *)(param_1 + 0x110),0x2d0);
|
|
|
|
iVar1 = *(int *)(param_1 + 0x14);
|
|
|
|
puVar3 = (undefined4 *)(param_1 + 0x110);
|
|
|
|
for (iVar2 = 6; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*puVar3 = *param_2;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x10c) = *(int *)(param_1 + 0x10c) + 1;
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
memmove((void *)(param_1 + 0x18),(undefined4 *)(param_1 + 0x14),0x7c);
|
|
|
|
*(undefined4 *)(param_1 + 0x14) = param_3;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672d20 at 0x00672D20 (size: 123) ---
|
|
|
|
|
|
uint FUN_00672d20(uint param_1,int param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
char cVar4;
|
|
|
|
int iVar5;
|
|
|
|
|
|
|
|
uVar1 = *(uint *)(param_2 + 0x10c);
|
|
|
|
if (0x3d < (int)uVar1) {
|
|
|
|
return uVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
iVar3 = uVar1 - 1;
|
|
|
|
cVar4 = '\0';
|
|
|
|
iVar5 = 0;
|
|
|
|
iVar2 = 0;
|
|
|
|
if (-1 < iVar3) {
|
|
|
|
do {
|
|
|
|
iVar2 = (iVar3 + iVar5) / 2;
|
|
|
|
uVar1 = *(uint *)(param_2 + 0x114 + iVar2 * 0x18);
|
|
|
|
if (param_1 == uVar1) {
|
|
|
|
cVar4 = '\x01';
|
|
|
|
iVar5 = iVar3 + 1;
|
|
|
|
}
|
|
|
|
else if (param_1 < uVar1) {
|
|
|
|
iVar3 = iVar2 + -1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar5 = iVar2 + 1;
|
|
|
|
}
|
|
|
|
} while (iVar5 <= iVar3);
|
|
|
|
if (cVar4 != '\0') goto LAB_00672d8c;
|
|
|
|
}
|
|
|
|
if (*(uint *)(param_2 + 0x114 + iVar2 * 0x18) < param_1) {
|
|
|
|
iVar2 = iVar2 + 1;
|
|
|
|
}
|
|
|
|
LAB_00672d8c:
|
|
|
|
*param_3 = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),cVar4);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672da0 at 0x00672DA0 (size: 136) ---
|
|
|
|
|
|
void FUN_00672da0(undefined4 *param_1,int param_2,undefined4 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined4 local_18 [6];
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)(param_2 + 0x110);
|
|
|
|
puVar3 = local_18;
|
|
|
|
for (iVar1 = 6; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*puVar3 = *puVar2;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
*param_3 = *(undefined4 *)(param_2 + 0x14);
|
|
|
|
iVar1 = *(int *)(param_2 + 0x10c) + -1;
|
|
|
|
*(int *)(param_2 + 0x10c) = iVar1;
|
|
|
|
memmove((undefined4 *)(param_2 + 0x110),(void *)(param_2 + 0x128),iVar1 * 0x18);
|
|
|
|
if (*(int *)(param_2 + 0x14) != 0) {
|
|
|
|
memmove((int *)(param_2 + 0x14),(void *)(param_2 + 0x18),*(int *)(param_2 + 0x10c) * 4 + 4);
|
|
|
|
}
|
|
|
|
puVar2 = local_18;
|
|
|
|
for (iVar1 = 6; iVar1 != 0; iVar1 = iVar1 + -1) {
|
|
|
|
*param_1 = *puVar2;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
param_1 = param_1 + 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672e30 at 0x00672E30 (size: 105) ---
|
|
|
|
|
|
undefined4 FUN_00672e30(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
if (*(char *)(param_1 + 4) != '\0') {
|
|
|
|
*(undefined1 *)(param_1 + 4) = 0;
|
|
|
|
}
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004073b0((undefined4 *)(param_1 + 0x10),0x6b8);
|
|
|
|
FUN_006752a0(&local_14,*(undefined4 *)(param_1 + 0x10));
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672ea0 at 0x00672EA0 (size: 27) ---
|
|
|
|
|
|
void __fastcall FUN_00672ea0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_006771c0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672ec0 at 0x00672EC0 (size: 69) ---
|
|
|
|
|
|
void __fastcall FUN_00672ec0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
param_1[0x3e] = 0;
|
|
|
|
puVar2 = param_1 + 0x3f;
|
|
|
|
iVar3 = 0x3d;
|
|
|
|
do {
|
|
|
|
uVar1 = DAT_008f86d8;
|
|
|
|
*puVar2 = *puVar2 & 0xffff0000;
|
|
|
|
*(undefined2 *)((int)puVar2 + 2) = 0;
|
|
|
|
puVar2[1] = uVar1;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = 0;
|
|
|
|
puVar2[5] = 0;
|
|
|
|
puVar2 = puVar2 + 6;
|
|
|
|
iVar3 = iVar3 + -1;
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672f10 at 0x00672F10 (size: 79) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00672f10(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
FUN_00672ec0();
|
|
|
|
param_1[0x1b5] = param_2;
|
|
|
|
param_1[0x1b2] = 0;
|
|
|
|
param_1[0x1b3] = 0;
|
|
|
|
param_1[0x1b6] = 0;
|
|
|
|
param_1[0x1b7] = 0;
|
|
|
|
param_1[0x1b4] = 1;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672f60 at 0x00672F60 (size: 75) ---
|
|
|
|
|
|
void __fastcall FUN_00672f60(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x6c8) != 0) {
|
|
|
|
operator_delete__((void *)(*(int *)(param_1 + 0x6c8) + -4));
|
|
|
|
}
|
|
|
|
pvVar1 = *(void **)(param_1 + 0x6dc);
|
|
|
|
*(undefined4 *)(param_1 + 0x6c8) = 0;
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
FUN_00676da0();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x6dc) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00672fb0 at 0x00672FB0 (size: 307) ---
|
|
|
|
|
|
int __thiscall FUN_00672fb0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
iVar4 = 100;
|
|
|
|
*(undefined4 *)(param_1 + 0x6d8) = param_2;
|
|
|
|
*(undefined4 *)(param_1 + 0x6cc) = 100;
|
|
|
|
puVar2 = (undefined4 *)thunk_FUN_005df0f5(0x2a624);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = 100;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
puVar5 = puVar2;
|
|
|
|
do {
|
|
|
|
*puVar5 = 0;
|
|
|
|
*(undefined1 *)(puVar5 + 1) = 0;
|
|
|
|
puVar5[2] = 0;
|
|
|
|
puVar5[3] = 0;
|
|
|
|
puVar5[4] = 0;
|
|
|
|
FUN_00672ec0();
|
|
|
|
puVar5 = puVar5 + 0x1b2;
|
|
|
|
iVar4 = iVar4 + -1;
|
|
|
|
} while (iVar4 != 0);
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0x6c8) = puVar2;
|
|
|
|
uVar3 = *(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x14);
|
|
|
|
puVar2 = (undefined4 *)(param_1 + 0x10);
|
|
|
|
*puVar2 = uVar3;
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x20) = uVar3;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004073b0(puVar2,0x6b8);
|
|
|
|
iVar4 = FUN_00675150(&local_14,*puVar2);
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) == '\0') {
|
|
|
|
if (iVar4 != 0) goto LAB_006730c5;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar4 != 0) goto LAB_006730c5;
|
|
|
|
iVar4 = FUN_005df0f5(0x104);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
uVar3 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = FUN_00676d30(*(undefined4 *)(param_1 + 0x6d4),*(undefined4 *)(param_1 + 0x6d8));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x6dc) = uVar3;
|
|
|
|
cVar1 = FUN_00675ab0();
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
iVar4 = -2;
|
|
|
|
goto LAB_006730c5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar4 = FUN_00674e70();
|
|
|
|
LAB_006730c5:
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006730f0 at 0x006730F0 (size: 298) ---
|
|
|
|
|
|
int __thiscall FUN_006730f0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
int local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
iVar4 = 100;
|
|
|
|
local_18 = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6d8) = param_2;
|
|
|
|
*(undefined4 *)(param_1 + 0x6cc) = 100;
|
|
|
|
puVar2 = (undefined4 *)thunk_FUN_005df0f5(0x2a624);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = 100;
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
puVar5 = puVar2;
|
|
|
|
do {
|
|
|
|
*puVar5 = 0;
|
|
|
|
*(undefined1 *)(puVar5 + 1) = 0;
|
|
|
|
puVar5[2] = 0;
|
|
|
|
puVar5[3] = 0;
|
|
|
|
puVar5[4] = 0;
|
|
|
|
FUN_00672ec0();
|
|
|
|
puVar5 = puVar5 + 0x1b2;
|
|
|
|
iVar4 = iVar4 + -1;
|
|
|
|
} while (iVar4 != 0);
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0x6c8) = puVar2;
|
|
|
|
puVar2 = (undefined4 *)(param_1 + 0x10);
|
|
|
|
*puVar2 = *(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x20);
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004073b0(puVar2,0x6b8);
|
|
|
|
cVar1 = FUN_00675480(&local_14,*puVar2,0);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
local_18 = -1;
|
|
|
|
}
|
|
|
|
if ((*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') && (local_18 == 0)) {
|
|
|
|
iVar4 = FUN_005df0f5(0x104);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
uVar3 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = FUN_00676d30(*(undefined4 *)(param_1 + 0x6d4),*(undefined4 *)(param_1 + 0x6d8));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x6dc) = uVar3;
|
|
|
|
cVar1 = FUN_00675c40();
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
local_18 = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return local_18;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673220 at 0x00673220 (size: 142) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00673220(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_00676ef0();
|
|
|
|
}
|
|
|
|
iVar3 = 0;
|
|
|
|
if (0 < *(int *)(param_1 + 0x6cc)) {
|
|
|
|
iVar4 = 0;
|
|
|
|
do {
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c8) + iVar4;
|
|
|
|
if ((*(int *)(iVar1 + 0x10) != 0) && (*(char *)(iVar1 + 4) != '\0')) {
|
|
|
|
FUN_00672e30(iVar1,0);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + 1;
|
|
|
|
iVar4 = iVar4 + 0x6c8;
|
|
|
|
} while (iVar3 < *(int *)(param_1 + 0x6cc));
|
|
|
|
}
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x6d8) + 0x20) != *(int *)(param_1 + 0x10)) {
|
|
|
|
*(int *)(*(int *)(param_1 + 0x6d8) + 0x20) = *(int *)(param_1 + 0x10);
|
|
|
|
}
|
|
|
|
uVar2 = FUN_00674e70();
|
|
|
|
FUN_00675680();
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006732c0 at 0x006732C0 (size: 399) ---
|
|
|
|
|
|
int * __thiscall FUN_006732c0(int *param_1,int param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
piVar3 = (int *)0x0;
|
|
|
|
iVar5 = 0;
|
|
|
|
local_1c = 0;
|
|
|
|
if (param_2 == param_1[4]) {
|
|
|
|
piVar3 = param_1;
|
|
|
|
if (param_3 != (int *)0x0) {
|
|
|
|
*param_3 = -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_18 = 0;
|
|
|
|
iVar6 = 0;
|
|
|
|
while (iVar5 < param_1[0x1b3]) {
|
|
|
|
iVar2 = param_1[0x1b2];
|
|
|
|
piVar1 = (int *)(iVar6 + iVar2);
|
|
|
|
if (param_2 == *(int *)(iVar6 + 0x10 + iVar2)) {
|
|
|
|
*piVar1 = param_1[0x1b4];
|
|
|
|
param_1[0x1b4] = param_1[0x1b4] + 1;
|
|
|
|
piVar3 = piVar1;
|
|
|
|
if (param_3 != (int *)0x0) {
|
|
|
|
*param_3 = iVar5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (*piVar1 < *(int *)(local_18 + iVar2)) {
|
|
|
|
local_1c = iVar5;
|
|
|
|
local_18 = iVar6;
|
|
|
|
}
|
|
|
|
iVar5 = iVar5 + 1;
|
|
|
|
iVar6 = iVar6 + 0x6c8;
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
return piVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
iVar5 = local_1c * 0x6c8;
|
|
|
|
if (*(char *)(iVar5 + 4 + param_1[0x1b2]) != '\0') {
|
|
|
|
FUN_00672e30(iVar5 + param_1[0x1b2],0);
|
|
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
|
|
puVar4 = (undefined4 *)(param_1[0x1b2] + iVar5);
|
|
|
|
*puVar4 = 0;
|
|
|
|
*(undefined1 *)(puVar4 + 1) = 0;
|
|
|
|
puVar4[2] = 0;
|
|
|
|
puVar4[3] = 0;
|
|
|
|
puVar4[4] = 0;
|
|
|
|
puVar4[0x43] = 0;
|
|
|
|
puVar4[5] = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004073b0(iVar5 + 0x10 + param_1[0x1b2],0x6b8);
|
|
|
|
FUN_00675480(&local_14,param_2,0);
|
|
|
|
*(int *)(iVar5 + 0x10 + param_1[0x1b2]) = param_2;
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
}
|
|
|
|
piVar3 = (int *)(iVar5 + param_1[0x1b2]);
|
|
|
|
*piVar3 = param_1[0x1b4];
|
|
|
|
param_1[0x1b4] = param_1[0x1b4] + 1;
|
|
|
|
if (param_3 != (int *)0x0) {
|
|
|
|
*param_3 = local_1c;
|
|
|
|
return piVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return piVar3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673450 at 0x00673450 (size: 130) ---
|
|
|
|
|
|
int __fastcall FUN_00673450(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
iVar1 = FUN_006732c0(0,0);
|
|
|
|
*(undefined4 *)(iVar1 + 0x10c) = 0;
|
|
|
|
*(undefined4 *)(iVar1 + 0x10) = *(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x14);
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004073b0((undefined4 *)(iVar1 + 0x10),0x6b8);
|
|
|
|
FUN_00675150(&local_14,*(undefined4 *)(iVar1 + 0x10));
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006734e0 at 0x006734E0 (size: 371) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006734e0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
int local_c;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_2 + 0x14);
|
|
|
|
iVar2 = FUN_006732c0(*(undefined4 *)(param_2 + 0xc),0);
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(iVar2 + 0x14 + iVar1 * 4),0);
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x6d8) + 0x14) == *(int *)(param_2 + 0x18)) {
|
|
|
|
iVar4 = FUN_00673450();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar4 = FUN_006732c0(*(int *)(param_2 + 0x18),0);
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar4 + 0x10c) != 0x1e) {
|
|
|
|
puVar5 = (undefined4 *)(iVar3 + 0x3f8);
|
|
|
|
puVar7 = (undefined4 *)(iVar4 + 0x110);
|
|
|
|
for (iVar6 = 0xb4; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*puVar7 = *puVar5;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar3 + 0x14) != 0) {
|
|
|
|
puVar5 = (undefined4 *)(iVar3 + 0x90);
|
|
|
|
puVar7 = (undefined4 *)(iVar4 + 0x14);
|
|
|
|
for (iVar6 = 0x1f; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*puVar7 = *puVar5;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar4 + 0x10c) = 0x1e;
|
|
|
|
FUN_00672e30(iVar4,0);
|
|
|
|
}
|
|
|
|
iVar4 = *(int *)(iVar2 + 0x10c);
|
|
|
|
if (iVar4 == *(int *)(param_2 + 0x10)) {
|
|
|
|
if (iVar1 < iVar4) {
|
|
|
|
puVar5 = (undefined4 *)(iVar2 + 0x18 + iVar4 * 4);
|
|
|
|
local_c = iVar4 - iVar1;
|
|
|
|
puVar7 = (undefined4 *)(iVar2 + 0x110 + iVar4 * 0x18);
|
|
|
|
do {
|
|
|
|
*puVar5 = puVar5[-1];
|
|
|
|
puVar8 = puVar7 + -6;
|
|
|
|
puVar9 = puVar7;
|
|
|
|
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
|
|
*puVar9 = *puVar8;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
puVar9 = puVar9 + 1;
|
|
|
|
}
|
|
|
|
puVar5 = puVar5 + -1;
|
|
|
|
local_c = local_c + -1;
|
|
|
|
puVar7 = puVar7 + -6;
|
|
|
|
} while (local_c != 0);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar2 + 0x18 + iVar1 * 4) = *(undefined4 *)(param_2 + 0x18);
|
|
|
|
puVar5 = (undefined4 *)(iVar3 + 0x3e0);
|
|
|
|
puVar7 = (undefined4 *)(iVar2 + 0x110 + iVar1 * 0x18);
|
|
|
|
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
|
|
*puVar7 = *puVar5;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
*(int *)(iVar2 + 0x10c) = *(int *)(iVar2 + 0x10c) + 1;
|
|
|
|
FUN_00672e30(iVar2,0);
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar3 + 0x10c) != 0x1e) {
|
|
|
|
*(undefined4 *)(iVar3 + 0x10c) = 0x1e;
|
|
|
|
FUN_00672e30(iVar3,0);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673660 at 0x00673660 (size: 353) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00673660(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
|
|
|
|
uVar6 = 0;
|
|
|
|
if (*(int *)(param_2 + 0x18) == -2) {
|
|
|
|
return 0xffffff9b;
|
|
|
|
}
|
|
|
|
iVar1 = FUN_006732c0(*(undefined4 *)(param_2 + 0x14),0);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar1 + 0x14) != 0) {
|
|
|
|
return 0xffffff9b;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_2 + 0x28) == *(int *)(iVar1 + 0x10c)) {
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
iVar2 = FUN_00406d80();
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
uVar6 = FUN_00674e90(*(undefined4 *)(param_2 + 0x18),*(undefined4 *)(param_2 + 0x24));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = *(int *)(iVar1 + 0x10c) + -1;
|
|
|
|
if (-1 < iVar2) {
|
|
|
|
puVar4 = (undefined4 *)(iVar1 + 0x110 + iVar2 * 0x18);
|
|
|
|
do {
|
|
|
|
if ((uint)puVar4[1] <= *(uint *)(param_2 + 0x10)) break;
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
puVar5 = puVar4;
|
|
|
|
puVar7 = puVar4 + 6;
|
|
|
|
for (iVar3 = 6; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*puVar7 = *puVar5;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
puVar4 = puVar4 + -6;
|
|
|
|
} while (-1 < iVar2);
|
|
|
|
}
|
|
|
|
iVar2 = iVar1 + (iVar2 * 3 + 3) * 8;
|
|
|
|
puVar4 = (undefined4 *)(param_2 + 0xc);
|
|
|
|
puVar5 = (undefined4 *)(iVar2 + 0x110);
|
|
|
|
for (iVar3 = 6; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*puVar5 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar2 + 0x118) = *(undefined4 *)(param_2 + 0x24);
|
|
|
|
uVar6 = FUN_00417640();
|
|
|
|
*(undefined4 *)(iVar2 + 0x11c) = uVar6;
|
|
|
|
*(int *)(iVar1 + 0x10c) = *(int *)(iVar1 + 0x10c) + 1;
|
|
|
|
uVar6 = FUN_00675150(param_3,*(undefined4 *)(param_2 + 0x24));
|
|
|
|
FUN_00672e30(iVar1,0);
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_006768f0(*(undefined4 *)(param_2 + 0x10));
|
|
|
|
return uVar6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar6;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006737d0 at 0x006737D0 (size: 399) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006737d0(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
uint uVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
int iVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
undefined4 *puVar10;
|
|
|
|
undefined4 local_c;
|
|
|
|
|
|
|
|
local_c = 0;
|
|
|
|
iVar4 = FUN_006732c0(*(undefined4 *)(param_2 + 0x14),0);
|
|
|
|
iVar2 = *(int *)(param_2 + 0x2c);
|
|
|
|
iVar3 = *(int *)(param_2 + 0x24);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_2 + 0x18) == -2) {
|
|
|
|
*(undefined4 *)(iVar4 + (iVar2 * 3 + 0x24) * 8) = *(undefined4 *)(param_2 + 0x1c);
|
|
|
|
iVar5 = iVar4 + iVar2 * 0x18;
|
|
|
|
*(undefined4 *)(iVar5 + 0x124) = *(undefined4 *)(param_2 + 0x20);
|
|
|
|
*(undefined2 *)(iVar5 + 0x112) = *(undefined2 *)(param_2 + 0xe);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
iVar5 = FUN_00406d80();
|
|
|
|
if (iVar5 == 0) goto LAB_006738fe;
|
|
|
|
iVar5 = iVar4 + iVar2 * 0x18;
|
|
|
|
puVar9 = (undefined4 *)(param_2 + 0xc);
|
|
|
|
puVar10 = (undefined4 *)(iVar5 + 0x110);
|
|
|
|
for (iVar8 = 6; iVar8 != 0; iVar8 = iVar8 + -1) {
|
|
|
|
*puVar10 = *puVar9;
|
|
|
|
puVar9 = puVar9 + 1;
|
|
|
|
puVar10 = puVar10 + 1;
|
|
|
|
}
|
|
|
|
*(int *)(iVar5 + 0x118) = iVar3;
|
|
|
|
uVar6 = FUN_00406db0();
|
|
|
|
if (uVar6 < 5) {
|
|
|
|
iVar8 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar8 = FUN_00406db0();
|
|
|
|
iVar8 = iVar8 + -4;
|
|
|
|
}
|
|
|
|
*(int *)(iVar5 + 0x11c) = iVar8;
|
|
|
|
local_c = FUN_00675150(param_3,iVar3);
|
|
|
|
}
|
|
|
|
FUN_00672e30(iVar4,0);
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_006771c0(*(undefined4 *)(param_2 + 0x10));
|
|
|
|
}
|
|
|
|
LAB_006738fe:
|
|
|
|
piVar1 = (int *)(param_2 + 0x30);
|
|
|
|
iVar2 = *(int *)(iVar4 + 0x118 + iVar2 * 0x18);
|
|
|
|
if (iVar2 != *piVar1) {
|
|
|
|
param_2 = iVar3;
|
|
|
|
if (iVar3 == iVar2) {
|
|
|
|
param_2 = *piVar1;
|
|
|
|
}
|
|
|
|
uVar7 = FUN_00674f50(param_2,*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x1c),1);
|
|
|
|
return uVar7;
|
|
|
|
}
|
|
|
|
return local_c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673960 at 0x00673960 (size: 601) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00673960(int param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
uint uVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
int local_24;
|
|
|
|
int local_20;
|
|
|
|
int local_1c;
|
|
|
|
undefined4 local_18 [6];
|
|
|
|
|
|
|
|
iVar5 = (int)param_2;
|
|
|
|
local_24 = -1;
|
|
|
|
local_20 = -1;
|
|
|
|
iVar1 = FUN_006732c0(*(undefined4 *)((int)param_2 + 0xc),¶m_2);
|
|
|
|
local_1c = iVar1;
|
|
|
|
iVar2 = FUN_006732c0(*(undefined4 *)(iVar5 + 0x10),&local_20);
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(iVar5 + 0x14),&local_24);
|
|
|
|
param_2 = (undefined4 *)(iVar3 + 0x14);
|
|
|
|
if ((iVar1 != -0x14) && (*(int *)(iVar1 + 0x10c) == *(int *)(iVar5 + 0x1c))) {
|
|
|
|
local_18[0] = 0;
|
|
|
|
local_18[2] = 0;
|
|
|
|
local_18[3] = 0;
|
|
|
|
local_18[4] = 0;
|
|
|
|
local_18[5] = 0;
|
|
|
|
local_18[1] = DAT_008f86d8;
|
|
|
|
FUN_00672bf0(iVar1,*(undefined4 *)(iVar5 + 0x18),local_18);
|
|
|
|
if (param_2 != (undefined4 *)0x0) {
|
|
|
|
*(undefined4 *)(iVar2 + 0x90) = 0;
|
|
|
|
puVar4 = local_18;
|
|
|
|
puVar7 = (undefined4 *)(iVar2 + 0x3e0);
|
|
|
|
for (iVar5 = 6; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar7 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
*(int *)(iVar2 + 0x10c) = *(int *)(iVar2 + 0x10c) + 1;
|
|
|
|
param_2 = (undefined4 *)(iVar3 + 0x14);
|
|
|
|
puVar4 = (undefined4 *)(iVar3 + 0x110);
|
|
|
|
puVar7 = (undefined4 *)(iVar2 + 0x110 + *(int *)(iVar2 + 0x10c) * 0x18);
|
|
|
|
for (uVar6 = (uint)(*(int *)(iVar3 + 0x10c) * 0x18) >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*puVar7 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar7 = *(undefined1 *)puVar4;
|
|
|
|
puVar4 = (undefined4 *)((int)puVar4 + 1);
|
|
|
|
puVar7 = (undefined4 *)((int)puVar7 + 1);
|
|
|
|
}
|
|
|
|
puVar4 = param_2;
|
|
|
|
puVar7 = (undefined4 *)(iVar2 + 0x14 + *(int *)(iVar2 + 0x10c) * 4);
|
|
|
|
for (uVar6 = *(int *)(iVar3 + 0x10c) * 4 + 4U >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*puVar7 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar7 = *(undefined1 *)puVar4;
|
|
|
|
puVar4 = (undefined4 *)((int)puVar4 + 1);
|
|
|
|
puVar7 = (undefined4 *)((int)puVar7 + 1);
|
|
|
|
}
|
|
|
|
*(int *)(iVar2 + 0x10c) = *(int *)(iVar2 + 0x10c) + *(int *)(iVar3 + 0x10c);
|
|
|
|
FUN_00672e30(iVar2,0);
|
|
|
|
FUN_00674f50(*(undefined4 *)(iVar3 + 0x10),*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x1c),0);
|
|
|
|
puVar4 = (undefined4 *)(local_24 * 0x6c8 + *(int *)(param_1 + 0x6c8));
|
|
|
|
*puVar4 = 0;
|
|
|
|
*(undefined1 *)(puVar4 + 1) = 0;
|
|
|
|
puVar4[2] = 0;
|
|
|
|
puVar4[3] = 0;
|
|
|
|
puVar4[4] = 0;
|
|
|
|
puVar4[0x43] = 0;
|
|
|
|
puVar4[5] = 0;
|
|
|
|
iVar1 = local_1c;
|
|
|
|
}
|
|
|
|
if ((iVar1 + 0x14 == param_1 + 0x14) && (*(int *)(param_1 + 0x10c) == 0)) {
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x20) = *(undefined4 *)(iVar2 + 0x10);
|
|
|
|
FUN_00674e70();
|
|
|
|
FUN_00674f50(*(undefined4 *)(iVar1 + 0x10),*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x1c),0);
|
|
|
|
puVar4 = (undefined4 *)(iVar2 + 0x14);
|
|
|
|
puVar7 = (undefined4 *)(param_1 + 0x14);
|
|
|
|
for (iVar5 = 0x1ad; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar7 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = *(undefined4 *)(iVar2 + 0x10);
|
|
|
|
puVar4 = (undefined4 *)(local_20 * 0x6c8 + *(int *)(param_1 + 0x6c8));
|
|
|
|
*puVar4 = 0;
|
|
|
|
*(undefined1 *)(puVar4 + 1) = 0;
|
|
|
|
puVar4[2] = 0;
|
|
|
|
puVar4[3] = 0;
|
|
|
|
puVar4[4] = 0;
|
|
|
|
puVar4[0x43] = 0;
|
|
|
|
puVar4[5] = 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
FUN_00672e30(iVar1,0);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673bc0 at 0x00673BC0 (size: 49) ---
|
|
|
|
|
|
void FUN_00673bc0(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_2 + 0x14);
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
param_2 = FUN_006732c0(iVar1,0);
|
|
|
|
iVar1 = *(int *)(param_2 + 0x14);
|
|
|
|
}
|
|
|
|
*param_1 = *(undefined4 *)(param_2 + 0x114);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673c00 at 0x00673C00 (size: 69) ---
|
|
|
|
|
|
void FUN_00673c00(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_2 + 0x14);
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
param_2 = FUN_006732c0(*(undefined4 *)(param_2 + 0x14 + *(int *)(param_2 + 0x10c) * 4),0);
|
|
|
|
iVar1 = *(int *)(param_2 + 0x14);
|
|
|
|
}
|
|
|
|
*param_1 = *(undefined4 *)(param_2 + 0xfc + *(int *)(param_2 + 0x10c) * 0x18);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673c50 at 0x00673C50 (size: 163) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00673c50(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(param_2 + 0x10),0);
|
|
|
|
iVar2 = *(int *)(param_2 + 0x14);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
iVar1 = iVar3 + iVar2 * 0x18;
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(iVar1 + 0x114)) {
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_00676eb0(*(int *)(param_2 + 0xc));
|
|
|
|
}
|
|
|
|
FUN_00674f50(*(undefined4 *)(iVar1 + 0x118),*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x1c),1);
|
|
|
|
FUN_00672bf0(iVar3,iVar2,0);
|
|
|
|
uVar4 = FUN_00672e30(iVar3,0);
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673d00 at 0x00673D00 (size: 287) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00673d00(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(param_2 + 0x14),0);
|
|
|
|
iVar4 = FUN_006732c0(*(undefined4 *)(param_2 + 0x18),0);
|
|
|
|
iVar2 = *(int *)(param_2 + 0x20);
|
|
|
|
if ((iVar3 == 0) || (iVar4 == 0)) {
|
|
|
|
uVar5 = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = iVar3 + *(int *)(param_2 + 0x1c) * 0x18;
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(iVar3 + 0x114 + *(int *)(param_2 + 0x1c) * 0x18)) {
|
|
|
|
if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_00676eb0(*(int *)(param_2 + 0xc));
|
|
|
|
}
|
|
|
|
FUN_00674f50(*(undefined4 *)(iVar1 + 0x118),*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x1c),1);
|
|
|
|
puVar7 = (undefined4 *)(iVar4 + 0x110 + iVar2 * 0x18);
|
|
|
|
puVar8 = (undefined4 *)(iVar1 + 0x110);
|
|
|
|
for (iVar6 = 6; iVar6 != 0; iVar6 = iVar6 + -1) {
|
|
|
|
*puVar8 = *puVar7;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
uVar5 = FUN_00672e30(iVar3,0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar5 = 0;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_2 + 0x10) == *(int *)(iVar4 + 0x114 + iVar2 * 0x18)) {
|
|
|
|
FUN_00672bf0(iVar4,iVar2,0);
|
|
|
|
uVar5 = FUN_00672e30(iVar4,0);
|
|
|
|
return uVar5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673e20 at 0x00673E20 (size: 413) ---
|
|
|
|
|
|
undefined4 FUN_00673e20(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
undefined4 local_54;
|
|
|
|
int local_50;
|
|
|
|
int local_4c;
|
|
|
|
undefined4 local_48 [6];
|
|
|
|
undefined4 local_30 [6];
|
|
|
|
undefined1 local_18 [24];
|
|
|
|
|
|
|
|
iVar5 = *(int *)(param_1 + 0x14);
|
|
|
|
local_4c = 0;
|
|
|
|
iVar2 = FUN_006732c0(*(undefined4 *)(param_1 + 0xc),0);
|
|
|
|
local_50 = iVar2;
|
|
|
|
local_4c = FUN_006732c0(*(undefined4 *)(iVar2 + 0x14 + iVar5 * 4),0);
|
|
|
|
if (*(char *)(param_1 + 0x20) == '\0') {
|
|
|
|
iVar2 = FUN_006732c0(*(undefined4 *)(iVar2 + 0x18 + iVar5 * 4),0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = FUN_006732c0(*(undefined4 *)(iVar2 + 0x10 + iVar5 * 4),0);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(iVar2 + 0x10c);
|
|
|
|
if (*(int *)(param_1 + 0x1c) == iVar1) {
|
|
|
|
if (*(char *)(param_1 + 0x20) == '\0') {
|
|
|
|
puVar3 = (undefined4 *)FUN_00672da0(local_18,iVar2,&local_54);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_54 = *(undefined4 *)(iVar2 + 0x14 + iVar1 * 4);
|
|
|
|
*(int *)(iVar2 + 0x10c) = iVar1 + -1;
|
|
|
|
puVar3 = (undefined4 *)(iVar2 + 0x110 + (iVar1 + -1) * 0x18);
|
|
|
|
puVar6 = local_48;
|
|
|
|
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
|
|
*puVar6 = *puVar3;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
puVar3 = local_48;
|
|
|
|
}
|
|
|
|
iVar1 = local_4c;
|
|
|
|
puVar6 = local_30;
|
|
|
|
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
|
|
*puVar6 = *puVar3;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x10) == *(int *)(local_50 + 0x114 + iVar5 * 0x18)) {
|
|
|
|
if (*(char *)(param_1 + 0x20) != '\0') {
|
|
|
|
iVar5 = iVar5 + -1;
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)(local_50 + 0x110 + iVar5 * 0x18);
|
|
|
|
puVar6 = puVar3;
|
|
|
|
puVar7 = local_48;
|
|
|
|
for (iVar5 = 6; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar7 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
puVar6 = local_30;
|
|
|
|
for (iVar5 = 6; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar3 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
if (*(int *)(param_1 + 0x18) == *(int *)(local_4c + 0x10c)) {
|
|
|
|
if (*(char *)(param_1 + 0x20) == '\0') {
|
|
|
|
*(int *)(local_4c + 0x10c) = *(int *)(local_4c + 0x10c) + 1;
|
|
|
|
puVar3 = local_48;
|
|
|
|
puVar6 = (undefined4 *)(local_4c + 0x3e0);
|
|
|
|
for (iVar5 = 6; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar6 = *puVar3;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(local_4c + 0x90) = local_54;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00672c80(local_4c,local_48,local_54);
|
|
|
|
}
|
|
|
|
FUN_00672e30(iVar1,0);
|
|
|
|
}
|
|
|
|
FUN_00672e30(local_50,0);
|
|
|
|
}
|
|
|
|
FUN_00672e30(iVar2,0);
|
|
|
|
}
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00673fc0 at 0x00673FC0 (size: 220) ---
|
|
|
|
|
|
int FUN_00673fc0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
iVar2 = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
switch(param_1[1]) {
|
|
|
|
case 0:
|
|
|
|
goto switchD_00673fea_caseD_0;
|
|
|
|
case 1:
|
|
|
|
puVar3 = &local_14;
|
|
|
|
uVar1 = (**(code **)(*param_1 + 4))(puVar3);
|
|
|
|
iVar2 = FUN_00673660(uVar1,puVar3);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0xc))();
|
|
|
|
iVar2 = FUN_00673c50(uVar1);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x14))();
|
|
|
|
iVar2 = FUN_00673d00(uVar1);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x1c))();
|
|
|
|
iVar2 = FUN_00673960(uVar1);
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
puVar3 = &local_14;
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x24))(puVar3);
|
|
|
|
iVar2 = FUN_006737d0(uVar1,puVar3);
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x2c))();
|
|
|
|
iVar2 = FUN_006734e0(uVar1);
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
uVar1 = (**(code **)(*param_1 + 0x34))();
|
|
|
|
iVar2 = FUN_00673e20(uVar1);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
iVar2 = -0x67;
|
|
|
|
goto switchD_00673fea_caseD_0;
|
|
|
|
}
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
FUN_00675680();
|
|
|
|
}
|
|
|
|
switchD_00673fea_caseD_0:
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006740c0 at 0x006740C0 (size: 144) ---
|
|
|
|
|
|
void __fastcall FUN_006740c0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 local_18 [6];
|
|
|
|
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((param_1[1] & 0x80000000U) != 0x80000000) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
uVar1 = param_1[1] & 0x7fffffff;
|
|
|
|
if (-1 < (int)(uVar1 - 1)) {
|
|
|
|
local_18[0] = 0;
|
|
|
|
local_18[2] = 0;
|
|
|
|
local_18[3] = 0;
|
|
|
|
local_18[4] = 0;
|
|
|
|
local_18[5] = 0;
|
|
|
|
iVar2 = (uVar1 - 1) * 0x18;
|
|
|
|
do {
|
|
|
|
puVar5 = (undefined4 *)(*param_1 + iVar2);
|
|
|
|
local_18[1] = DAT_008f86d8;
|
|
|
|
iVar2 = iVar2 + -0x18;
|
|
|
|
uVar1 = uVar1 - 1;
|
|
|
|
puVar4 = local_18;
|
|
|
|
for (iVar3 = 6; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*puVar5 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar5 = puVar5 + 1;
|
|
|
|
}
|
|
|
|
} while (uVar1 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674160 at 0x00674160 (size: 118) ---
|
|
|
|
|
|
int FUN_00674160(int param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
|
|
|
|
piVar1 = param_3;
|
|
|
|
if (param_3 != (int *)0x0) {
|
|
|
|
*param_3 = 0;
|
|
|
|
}
|
|
|
|
while( true ) {
|
|
|
|
if (param_1 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
cVar2 = FUN_00672d20(param_2,param_1,¶m_3);
|
|
|
|
if (cVar2 != '\0') break;
|
|
|
|
if (*(int *)(param_1 + 0x14) == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
param_1 = FUN_006732c0(*(undefined4 *)(param_1 + 0x14 + (int)param_3 * 4),0);
|
|
|
|
}
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
*piVar1 = param_1;
|
|
|
|
}
|
|
|
|
return param_1 + 0x110 + (int)param_3 * 0x18;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006741e0 at 0x006741E0 (size: 103) ---
|
|
|
|
|
|
void __thiscall FUN_006741e0(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 local_1c [12];
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00677270();
|
|
|
|
local_10 = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
local_c = *(undefined4 *)(param_2 + 0x10c);
|
|
|
|
local_8 = param_3;
|
|
|
|
local_4 = *(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x14);
|
|
|
|
FUN_006755e0(local_1c);
|
|
|
|
FUN_006734e0(local_1c);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674250 at 0x00674250 (size: 112) ---
|
|
|
|
|
|
void __thiscall FUN_00674250(int param_1,int param_2,undefined4 *param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined1 local_2c [12];
|
|
|
|
undefined4 local_20 [6];
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00677a10();
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6d8);
|
|
|
|
puVar3 = local_20;
|
|
|
|
for (iVar2 = 6; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*puVar3 = *param_3;
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
local_8 = *(undefined4 *)(iVar1 + 0x14);
|
|
|
|
local_4 = *(undefined4 *)(param_2 + 0x10c);
|
|
|
|
FUN_006755e0(local_2c);
|
|
|
|
FUN_00673660(local_2c,param_4);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006742c0 at 0x006742C0 (size: 143) ---
|
|
|
|
|
|
void __thiscall FUN_006742c0(int param_1,int param_2,undefined4 *param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined1 local_34 [12];
|
|
|
|
undefined4 local_28 [6];
|
|
|
|
undefined4 local_10;
|
|
|
|
int local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar3 = param_3;
|
|
|
|
iVar1 = param_2;
|
|
|
|
FUN_00672d20(param_3[1],param_2,¶m_2);
|
|
|
|
FUN_00677a50();
|
|
|
|
puVar4 = local_28;
|
|
|
|
for (iVar2 = 6; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*puVar4 = *puVar3;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
}
|
|
|
|
local_8 = param_2;
|
|
|
|
local_4 = *(undefined4 *)(iVar1 + 0x118 + param_2 * 0x18);
|
|
|
|
local_10 = *(undefined4 *)(*(int *)(param_1 + 0x6d8) + 0x14);
|
|
|
|
FUN_006755e0(local_34);
|
|
|
|
FUN_006737d0(local_34,param_4);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674350 at 0x00674350 (size: 424) ---
|
|
|
|
|
|
void __thiscall FUN_00674350(undefined4 *param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined1 local_6ec [12];
|
|
|
|
undefined4 local_6e0;
|
|
|
|
undefined4 local_6dc;
|
|
|
|
int local_6d8;
|
|
|
|
undefined4 local_6d4;
|
|
|
|
undefined4 local_6d0 [435];
|
|
|
|
|
|
|
|
uVar4 = *(uint *)(param_2 + 4);
|
|
|
|
if (param_1[0x43] == 0x3d) {
|
|
|
|
puVar1 = (undefined4 *)FUN_00673450();
|
|
|
|
puVar6 = param_1;
|
|
|
|
puVar3 = local_6d0;
|
|
|
|
for (iVar5 = 0x1b2; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar3 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
puVar6 = puVar1;
|
|
|
|
puVar3 = param_1;
|
|
|
|
for (iVar5 = 0x1b2; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar3 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
puVar6 = local_6d0;
|
|
|
|
puVar3 = puVar1;
|
|
|
|
for (iVar5 = 0x1b2; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*puVar3 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
param_1[5] = puVar1[4];
|
|
|
|
*(undefined4 *)(param_1[0x1b6] + 0x20) = param_1[4];
|
|
|
|
FUN_00674e70();
|
|
|
|
FUN_006741e0(param_1,0,puVar1);
|
|
|
|
}
|
|
|
|
iVar5 = param_1[5];
|
|
|
|
puVar6 = param_1;
|
|
|
|
do {
|
|
|
|
if (iVar5 == 0) {
|
|
|
|
*(undefined4 *)(param_2 + 8) = puVar6[4];
|
|
|
|
uVar4 = FUN_00406db0();
|
|
|
|
if (uVar4 < 5) {
|
|
|
|
iVar5 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar5 = FUN_00406db0();
|
|
|
|
iVar5 = iVar5 + -4;
|
|
|
|
}
|
|
|
|
*(int *)(param_2 + 0xc) = iVar5;
|
|
|
|
FUN_00674250(puVar6,param_2,param_3);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar5 = puVar6[0x43] + -1;
|
|
|
|
if (-1 < iVar5) {
|
|
|
|
puVar2 = puVar6 + iVar5 * 6 + 0x45;
|
|
|
|
do {
|
|
|
|
if (*puVar2 <= uVar4) break;
|
|
|
|
iVar5 = iVar5 + -1;
|
|
|
|
puVar2 = puVar2 + -6;
|
|
|
|
} while (-1 < iVar5);
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)FUN_006732c0(puVar6[iVar5 + 6],0);
|
|
|
|
if (puVar3[0x43] == 0x3d) {
|
|
|
|
FUN_00677270();
|
|
|
|
local_6e0 = puVar6[4];
|
|
|
|
local_6dc = puVar6[0x43];
|
|
|
|
local_6d4 = *(undefined4 *)(param_1[0x1b6] + 0x14);
|
|
|
|
local_6d8 = iVar5 + 1;
|
|
|
|
FUN_006755e0(local_6ec);
|
|
|
|
FUN_006734e0(local_6ec);
|
|
|
|
FUN_00675680();
|
|
|
|
if ((uint)puVar6[(iVar5 + 1) * 6 + 0x45] < uVar4) {
|
|
|
|
puVar3 = (undefined4 *)FUN_006732c0(puVar6[iVar5 + 7],0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar5 = puVar3[5];
|
|
|
|
puVar6 = puVar3;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674500 at 0x00674500 (size: 120) ---
|
|
|
|
|
|
void FUN_00674500(int param_1,int param_2,int param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined1 local_20 [12];
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00677240();
|
|
|
|
local_14 = *(undefined4 *)(param_1 + 0x10);
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x10c);
|
|
|
|
local_10 = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
local_c = *(undefined4 *)(param_3 + 0x10);
|
|
|
|
local_8 = param_4;
|
|
|
|
iVar1 = FUN_006755e0(local_20);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
iVar1 = FUN_00673960(local_20);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
FUN_00675680();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674580 at 0x00674580 (size: 94) ---
|
|
|
|
|
|
void FUN_00674580(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 local_18 [12];
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
FUN_006773d0();
|
|
|
|
local_c = *(undefined4 *)(param_1 + 0x114 + param_2 * 0x18);
|
|
|
|
local_8 = *(undefined4 *)(param_1 + 0x10);
|
|
|
|
local_4 = param_2;
|
|
|
|
FUN_006755e0(local_18);
|
|
|
|
FUN_00673c50(local_18);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006745e0 at 0x006745E0 (size: 109) ---
|
|
|
|
|
|
void FUN_006745e0(undefined4 param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,
|
|
|
|
undefined4 param_5,undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 local_24 [12];
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00677400();
|
|
|
|
local_18 = param_1;
|
|
|
|
local_14 = param_2;
|
|
|
|
local_c = param_4;
|
|
|
|
local_10 = param_3;
|
|
|
|
local_8 = param_5;
|
|
|
|
local_4 = param_6;
|
|
|
|
FUN_006755e0(local_24);
|
|
|
|
FUN_00673d00(local_24);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674650 at 0x00674650 (size: 118) ---
|
|
|
|
|
|
void FUN_00674650(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined1 param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 local_24 [12];
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
int local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined1 local_4;
|
|
|
|
|
|
|
|
FUN_006777c0();
|
|
|
|
local_18 = *(undefined4 *)(param_1 + 0x10);
|
|
|
|
local_14 = *(undefined4 *)(param_1 + 0x114 + param_2 * 0x18);
|
|
|
|
local_c = param_3;
|
|
|
|
local_10 = param_2;
|
|
|
|
local_4 = param_5;
|
|
|
|
local_8 = param_4;
|
|
|
|
FUN_006755e0(local_24);
|
|
|
|
FUN_00673e20(local_24);
|
|
|
|
FUN_00675680();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006746d0 at 0x006746D0 (size: 205) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006746d0(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
|
|
|
|
if ((uint)param_1[2] <= param_2) {
|
|
|
|
if (param_2 <= (param_1[1] & 0x7fffffffU)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
|
|
FUN_006740c0();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar2 = (uint *)thunk_FUN_005df0f5(param_2 * 0x18 + 4);
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
puVar1 = puVar2 + 1;
|
|
|
|
*puVar2 = param_2;
|
|
|
|
FUN_00401000(puVar1,0x18,param_2,&LAB_00672cf0);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
iVar5 = param_1[2];
|
|
|
|
if (-1 < iVar5 + -1) {
|
|
|
|
iVar3 = (iVar5 + -1) * 0x18;
|
|
|
|
do {
|
|
|
|
puVar6 = (undefined4 *)(*param_1 + iVar3);
|
|
|
|
puVar7 = (undefined4 *)(iVar3 + (int)puVar1);
|
|
|
|
iVar3 = iVar3 + -0x18;
|
|
|
|
iVar5 = iVar5 + -1;
|
|
|
|
for (iVar4 = 6; iVar4 != 0; iVar4 = iVar4 + -1) {
|
|
|
|
*puVar7 = *puVar6;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
} while (iVar5 != 0);
|
|
|
|
}
|
|
|
|
if (((param_1[1] & 0x80000000U) == 0x80000000) && (*param_1 != 0)) {
|
|
|
|
operator_delete__((void *)(*param_1 + -4));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = (int)puVar1;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006747a0 at 0x006747A0 (size: 42) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006747a0(int param_1,int param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((DAT_008f86d8 != param_2) && (*(int *)(param_1 + 0x10c) != 0)) {
|
|
|
|
uVar1 = FUN_00674160(param_1,param_2,param_3);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006747d0 at 0x006747D0 (size: 369) ---
|
|
|
|
|
|
undefined4 FUN_006747d0(int param_1,undefined4 param_2,int *param_3,int *param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
bool bVar5;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
iVar4 = param_1;
|
|
|
|
bVar5 = param_1 != 0;
|
|
|
|
param_1 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
local_8 = -1;
|
|
|
|
if (bVar5) {
|
|
|
|
while( true ) {
|
|
|
|
cVar2 = FUN_00672d20(param_2,iVar4,&local_8);
|
|
|
|
iVar1 = local_8;
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
*param_3 = iVar4;
|
|
|
|
*param_4 = local_8;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*(int *)(iVar4 + 0x14) == 0) break;
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(iVar4 + 0x14 + local_8 * 4),0);
|
|
|
|
if (*(int *)(iVar3 + 0x10c) < 0x1f) {
|
|
|
|
if (0 < iVar1) {
|
|
|
|
param_1 = FUN_006732c0(*(undefined4 *)(iVar4 + 0x10 + iVar1 * 4),0);
|
|
|
|
if (0x1e < *(int *)(param_1 + 0x10c)) {
|
|
|
|
FUN_00674650(iVar4,iVar1,*(undefined4 *)(iVar3 + 0x10c),*(int *)(param_1 + 0x10c),1);
|
|
|
|
goto LAB_006748ed;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (iVar1 < *(int *)(iVar4 + 0x10c)) {
|
|
|
|
local_4 = FUN_006732c0(*(undefined4 *)(iVar4 + 0x18 + iVar1 * 4),0);
|
|
|
|
if (0x1e < *(int *)(local_4 + 0x10c)) {
|
|
|
|
FUN_00674650(iVar4,iVar1,*(undefined4 *)(iVar3 + 0x10c),*(int *)(local_4 + 0x10c),0);
|
|
|
|
goto LAB_006748ed;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((local_4 == 0) || (*(int *)(iVar4 + 0x10c) <= iVar1)) {
|
|
|
|
if ((param_1 != 0) && (0 < iVar1)) {
|
|
|
|
FUN_00674500(iVar4,param_1,iVar3,iVar1 + -1);
|
|
|
|
iVar3 = param_1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00674500(iVar4,iVar3,local_4,iVar1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LAB_006748ed:
|
|
|
|
iVar4 = iVar3;
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
*param_4 = -1;
|
|
|
|
}
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674950 at 0x00674950 (size: 403) ---
|
|
|
|
|
|
int __thiscall FUN_00674950(int param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
undefined4 local_10;
|
|
|
|
int local_c;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
local_8 = -1;
|
|
|
|
local_10 = 0xffffffff;
|
|
|
|
local_4 = 0;
|
|
|
|
local_c = 0;
|
|
|
|
iVar3 = FUN_006747d0(param_3,param_2,&local_4,&local_8);
|
|
|
|
iVar2 = local_4;
|
|
|
|
iVar4 = local_8;
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
if (*(int *)(local_4 + 0x14) == 0) {
|
|
|
|
iVar4 = FUN_00674580(local_4,local_8);
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(local_4 + 0x14 + local_8 * 4),0);
|
|
|
|
param_3 = iVar3;
|
|
|
|
if (0x1e < *(int *)(iVar3 + 0x10c)) {
|
|
|
|
puVar5 = (undefined4 *)FUN_00673c00(¶m_3,iVar3);
|
|
|
|
param_3 = *puVar5;
|
|
|
|
FUN_006747d0(iVar3,param_3,&local_c,&local_10);
|
|
|
|
iVar4 = FUN_006745e0(param_2,param_3,*(undefined4 *)(iVar2 + 0x10),
|
|
|
|
*(undefined4 *)(local_c + 0x10),iVar4,local_10);
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_006732c0(*(undefined4 *)(iVar2 + 0x18 + iVar4 * 4),0);
|
|
|
|
iVar1 = param_3;
|
|
|
|
if (0x1e < *(int *)(iVar3 + 0x10c)) {
|
|
|
|
puVar5 = (undefined4 *)FUN_00673bc0(¶m_3,iVar3);
|
|
|
|
param_3 = *puVar5;
|
|
|
|
FUN_006747d0(iVar3,param_3,&local_c,&local_10);
|
|
|
|
iVar4 = FUN_006745e0(param_2,param_3,*(undefined4 *)(iVar2 + 0x10),
|
|
|
|
*(undefined4 *)(local_c + 0x10),iVar4,local_10);
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
iVar3 = FUN_00674500(iVar2,param_3,iVar3,iVar4);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
iVar4 = FUN_00674950(param_2,iVar1);
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (*(char *)(*(int *)(param_1 + 0x6d8) + 0x2c) != '\0') {
|
|
|
|
FUN_00676eb0(param_2);
|
|
|
|
}
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674af0 at 0x00674AF0 (size: 20) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00674af0(undefined4 param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_00674950(param_2,param_1);
|
|
|
|
return CONCAT31((int3)((uint)-iVar1 >> 8),'\x01' - (iVar1 != 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674b10 at 0x00674B10 (size: 82) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00674b10(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) <= (uint)param_1[2]) {
|
|
|
|
uVar1 = FUN_00453850((param_1[1] & 0x7fffffffU) + 1);
|
|
|
|
uVar1 = FUN_006746d0(uVar1);
|
|
|
|
if ((char)uVar1 == '\0') {
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar3 = (undefined4 *)(*param_1 + param_1[2] * 0x18);
|
|
|
|
for (iVar2 = 6; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*puVar3 = *param_2;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
puVar3 = puVar3 + 1;
|
|
|
|
}
|
|
|
|
iVar2 = param_1[2];
|
|
|
|
param_1[2] = iVar2 + 1;
|
|
|
|
return CONCAT31((int3)((uint)(iVar2 + 1) >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674b70 at 0x00674B70 (size: 71) ---
|
|
|
|
|
|
uint __fastcall FUN_00674b70(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
uVar3 = *(uint *)(param_1 + 0x6d8);
|
|
|
|
if (*(char *)(uVar3 + 0x2c) != '\0') {
|
|
|
|
local_4 = param_1;
|
|
|
|
puVar1 = (uint *)FUN_00676460(&local_4);
|
|
|
|
uVar3 = *puVar1;
|
|
|
|
if (DAT_008f86d8 != uVar3) {
|
|
|
|
iVar2 = FUN_00674950(uVar3,param_1);
|
|
|
|
return CONCAT31((int3)((uint)-iVar2 >> 8),'\x01' - (iVar2 != 0));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674bc0 at 0x00674BC0 (size: 234) ---
|
|
|
|
|
|
void FUN_00674bc0(undefined4 param_1,int param_2,undefined4 *param_3,uint param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
|
|
|
|
uVar1 = (uint)param_3;
|
|
|
|
if ((param_3 <= param_4) && (iVar5 = *(int *)(param_2 + 0x10c), iVar5 < 0x3e)) {
|
|
|
|
param_3 = (undefined4 *)0x0;
|
|
|
|
FUN_00672d20(uVar1,param_2,¶m_3);
|
|
|
|
if ((int)param_3 <= iVar5) {
|
|
|
|
iVar3 = param_2 + 0x110 + (int)param_3 * 0x18;
|
|
|
|
iVar6 = (int)param_3;
|
|
|
|
param_3 = (undefined4 *)(param_2 + 0x14 + (int)param_3 * 4);
|
|
|
|
do {
|
|
|
|
uVar4 = uVar1;
|
|
|
|
if (((iVar6 < iVar5) && (uVar4 = *(uint *)(iVar3 + 4), uVar1 <= uVar4)) &&
|
|
|
|
(uVar4 <= param_4)) {
|
|
|
|
FUN_00674b10(iVar3);
|
|
|
|
}
|
|
|
|
if (*(int *)(param_2 + 0x14) != 0) {
|
|
|
|
uVar2 = FUN_006732c0(*param_3,0);
|
|
|
|
FUN_00674bc0(param_1,uVar2,uVar1,param_4);
|
|
|
|
}
|
|
|
|
if (param_4 < uVar4) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
iVar5 = *(int *)(param_2 + 0x10c);
|
|
|
|
iVar6 = iVar6 + 1;
|
|
|
|
iVar3 = iVar3 + 0x18;
|
|
|
|
} while (iVar6 <= iVar5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674cb0 at 0x00674CB0 (size: 270) ---
|
|
|
|
|
|
void FUN_00674cb0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
char cVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int iVar6;
|
|
|
|
int iVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
undefined4 *puVar9;
|
|
|
|
|
|
|
|
iVar6 = param_2;
|
|
|
|
piVar3 = param_1;
|
|
|
|
piVar1 = (int *)(param_2 + 0x10c);
|
|
|
|
if (*piVar1 < 0x3e) {
|
|
|
|
iVar2 = *(int *)(param_2 + 0x10);
|
|
|
|
param_2 = 0;
|
|
|
|
if (0 < *piVar1) {
|
|
|
|
param_1 = (int *)(iVar6 + 0x110);
|
|
|
|
do {
|
|
|
|
if ((uint)piVar3[2] < (piVar3[1] & 0x7fffffffU)) {
|
|
|
|
LAB_00674d15:
|
|
|
|
puVar8 = param_1;
|
|
|
|
puVar9 = (undefined4 *)(*piVar3 + piVar3[2] * 0x18);
|
|
|
|
for (iVar7 = 6; iVar7 != 0; iVar7 = iVar7 + -1) {
|
|
|
|
*puVar9 = *puVar8;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
puVar9 = puVar9 + 1;
|
|
|
|
}
|
|
|
|
piVar3[2] = piVar3[2] + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar5 = FUN_00453850((piVar3[1] & 0x7fffffffU) + 1);
|
|
|
|
cVar4 = FUN_006746d0(uVar5);
|
|
|
|
if (cVar4 != '\0') goto LAB_00674d15;
|
|
|
|
}
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
param_1 = param_1 + 6;
|
|
|
|
} while (param_2 < *(int *)(iVar6 + 0x10c));
|
|
|
|
}
|
|
|
|
if ((*(int *)(iVar6 + 0x14) != 0) && (param_2 = 0, -1 < *(int *)(iVar6 + 0x10c))) {
|
|
|
|
iVar7 = 0x14;
|
|
|
|
do {
|
|
|
|
uVar5 = FUN_006732c0(*(undefined4 *)(iVar7 + iVar6),0);
|
|
|
|
FUN_00674cb0(piVar3,uVar5);
|
|
|
|
if (*(int *)(iVar6 + 0x10) != iVar2) {
|
|
|
|
iVar6 = FUN_006732c0(iVar2,0);
|
|
|
|
}
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
iVar7 = iVar7 + 4;
|
|
|
|
} while (param_2 <= *(int *)(iVar6 + 0x10c));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674dc0 at 0x00674DC0 (size: 28) ---
|
|
|
|
|
|
bool __thiscall FUN_00674dc0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
bool bVar1;
|
|
|
|
|
|
|
|
bVar1 = *(int *)(param_1 + 0x10c) != 0;
|
|
|
|
if (bVar1) {
|
|
|
|
FUN_00674cb0(param_2,param_1);
|
|
|
|
}
|
|
|
|
return bVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674de0 at 0x00674DE0 (size: 51) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00674de0(int param_1,int param_2,undefined4 param_3,undefined4 param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
*(undefined4 *)(param_2 + 8) = 0;
|
|
|
|
if (*(int *)(param_1 + 0x10c) != 0) {
|
|
|
|
FUN_00674bc0(param_2,param_1,param_3,param_4);
|
|
|
|
}
|
|
|
|
return CONCAT31((int3)((uint)*(int *)(param_2 + 8) >> 8),*(int *)(param_2 + 8) != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674e20 at 0x00674E20 (size: 25) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00674e20(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
FUN_00677be0();
|
|
|
|
*(undefined1 *)(param_1 + 2) = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674e40 at 0x00674E40 (size: 8) ---
|
|
|
|
|
|
void FUN_00674e40(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00677ca0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674e50 at 0x00674E50 (size: 19) ---
|
|
|
|
|
|
void __fastcall FUN_00674e50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00677c70();
|
|
|
|
*param_1 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674e70 at 0x00674E70 (size: 19) ---
|
|
|
|
|
|
void __fastcall FUN_00674e70(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00677d20(*param_1,0x50,0x140);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674e90 at 0x00674E90 (size: 178) ---
|
|
|
|
|
|
void __thiscall FUN_00674e90(int *param_1,undefined4 param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
iVar2 = 1;
|
|
|
|
local_4 = param_1;
|
|
|
|
iVar1 = FUN_00677cc0(&local_4,4,param_3);
|
|
|
|
if (-1 < (int)local_4) {
|
|
|
|
iVar2 = 1;
|
|
|
|
uVar3 = param_3;
|
|
|
|
do {
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (local_4 == (int *)0x0) {
|
|
|
|
local_4 = *(int **)(*param_1 + 0x14);
|
|
|
|
iVar2 = iVar2 + -1;
|
|
|
|
}
|
|
|
|
local_4 = (int *)((uint)local_4 | 0x80000000);
|
|
|
|
FUN_00677d20(&local_4,4,uVar3);
|
|
|
|
uVar3 = (uint)local_4 & 0x7fffffff;
|
|
|
|
iVar2 = iVar2 + 1;
|
|
|
|
iVar1 = FUN_00677cc0(&local_4,4,uVar3);
|
|
|
|
} while (-1 < (int)local_4);
|
|
|
|
}
|
|
|
|
if ((iVar1 == 0) && (param_3 != *(uint *)(*param_1 + 0x14))) {
|
|
|
|
*(uint *)(*param_1 + 0x14) = param_3;
|
|
|
|
*(int *)(*param_1 + 0x1c) = *(int *)(*param_1 + 0x1c) + iVar2;
|
|
|
|
FUN_00677d20(*param_1,0x50,0x140);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00674f50 at 0x00674F50 (size: 227) ---
|
|
|
|
|
|
void __thiscall FUN_00674f50(int *param_1,uint param_2,undefined4 param_3,int param_4,char param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
uVar1 = param_2;
|
|
|
|
iVar2 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
uVar3 = param_2;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
do {
|
|
|
|
uVar3 = param_2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar2 = FUN_00677cc0(¶m_2,4,param_2);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
if ((param_5 == '\0') && ((int)param_2 < 0)) {
|
|
|
|
iVar2 = -0x65;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
param_2 = param_2 | 0x80000000;
|
|
|
|
iVar2 = FUN_00677d20(¶m_2,4,uVar3);
|
|
|
|
param_2 = param_2 & 0x7fffffff;
|
|
|
|
local_4 = local_4 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (param_2 != 0);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_2 = uVar1 | 0x80000000;
|
|
|
|
iVar2 = FUN_00677d20(¶m_2,4,param_3);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
*(uint *)(*param_1 + 0x18) = uVar3;
|
|
|
|
*(int *)(*param_1 + 0x1c) = local_4 + param_4;
|
|
|
|
FUN_00677d20(*param_1,0x50,0x140);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675040 at 0x00675040 (size: 270) ---
|
|
|
|
|
|
void __thiscall FUN_00675040(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
uint uVar8;
|
|
|
|
|
|
|
|
iVar5 = *param_1;
|
|
|
|
uVar1 = *(uint *)(iVar5 + 4);
|
|
|
|
iVar3 = (int)param_2 / (int)uVar1;
|
|
|
|
*(int *)(iVar5 + 0x1c) = *(int *)(iVar5 + 0x1c) + iVar3;
|
|
|
|
puVar4 = (uint *)thunk_FUN_005df0f5(uVar1);
|
|
|
|
puVar7 = puVar4;
|
|
|
|
for (uVar6 = uVar1 >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*puVar7 = 0;
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
for (uVar6 = uVar1 & 3; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*(undefined1 *)puVar7 = 0;
|
|
|
|
puVar7 = (uint *)((int)puVar7 + 1);
|
|
|
|
}
|
|
|
|
uVar6 = *(uint *)(*param_1 + 8);
|
|
|
|
param_2 = 0;
|
|
|
|
uVar8 = uVar6;
|
|
|
|
if (0 < iVar3) {
|
|
|
|
do {
|
|
|
|
uVar8 = uVar6;
|
|
|
|
uVar6 = uVar8 + uVar1;
|
|
|
|
*puVar4 = uVar6 | 0x80000000;
|
|
|
|
iVar5 = FUN_00677d20(puVar4,uVar1,uVar8);
|
|
|
|
if (iVar5 != 0) goto LAB_00675126;
|
|
|
|
param_2 = param_2 + 1;
|
|
|
|
} while ((int)param_2 < iVar3);
|
|
|
|
}
|
|
|
|
*puVar4 = 0x80000000;
|
|
|
|
FUN_00677d20(puVar4,4,uVar8);
|
|
|
|
iVar5 = *param_1;
|
|
|
|
uVar2 = *(undefined4 *)(iVar5 + 0x18);
|
|
|
|
param_2 = *(uint *)(iVar5 + 8) | 0x80000000;
|
|
|
|
*(uint *)(iVar5 + 8) = uVar6;
|
|
|
|
*(uint *)(*param_1 + 0x18) = uVar8;
|
|
|
|
FUN_00677d20(¶m_2,4,uVar2);
|
|
|
|
LAB_00675126:
|
|
|
|
operator_delete__(puVar4);
|
|
|
|
FUN_00677d20(*param_1,0x50,0x140);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675150 at 0x00675150 (size: 328) ---
|
|
|
|
|
|
void __thiscall FUN_00675150(int *param_1,undefined4 param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint uVar7;
|
|
|
|
int local_14;
|
|
|
|
uint local_10;
|
|
|
|
int local_c;
|
|
|
|
|
|
|
|
uVar3 = param_3;
|
|
|
|
uVar4 = FUN_00406db0();
|
|
|
|
if (uVar4 < 5) {
|
|
|
|
uVar4 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar5 = FUN_00406db0();
|
|
|
|
uVar4 = iVar5 - 4;
|
|
|
|
}
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
puVar6 = (uint *)FUN_00406d80();
|
|
|
|
local_c = *(int *)(*param_1 + 4);
|
|
|
|
local_10 = local_c - 4;
|
|
|
|
local_14 = 1;
|
|
|
|
iVar5 = FUN_00677cc0(¶m_3,4,uVar3);
|
|
|
|
uVar2 = param_3 & 0x7fffffff;
|
|
|
|
while ((uVar4 != 0 && (iVar5 == 0))) {
|
|
|
|
uVar1 = *puVar6;
|
|
|
|
param_3 = uVar2;
|
|
|
|
if (local_10 < uVar4) {
|
|
|
|
FUN_00677cc0(¶m_3,4,uVar2);
|
|
|
|
param_3 = param_3 & 0x7fffffff;
|
|
|
|
local_14 = local_14 + 1;
|
|
|
|
uVar7 = uVar2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_c = uVar4 + 4;
|
|
|
|
*(int *)(*param_1 + 0x1c) = *(int *)(*param_1 + 0x1c) - local_14;
|
|
|
|
*(uint *)(*param_1 + 0x14) = uVar2;
|
|
|
|
uVar7 = 0;
|
|
|
|
FUN_00677d20(*param_1,0x50,0x140);
|
|
|
|
local_10 = uVar4;
|
|
|
|
}
|
|
|
|
*puVar6 = uVar7;
|
|
|
|
iVar5 = FUN_00677d20(puVar6,local_c,uVar3);
|
|
|
|
uVar2 = param_3;
|
|
|
|
if (iVar5 == 0) {
|
|
|
|
*puVar6 = uVar1;
|
|
|
|
uVar4 = uVar4 - local_10;
|
|
|
|
puVar6 = (uint *)((int)puVar6 + local_10);
|
|
|
|
uVar3 = uVar7;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006752a0 at 0x006752A0 (size: 465) ---
|
|
|
|
|
|
uint __thiscall FUN_006752a0(int *param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
bool bVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
int *piVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int local_18;
|
|
|
|
int local_14;
|
|
|
|
uint local_10;
|
|
|
|
uint local_c;
|
|
|
|
int local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
uVar5 = 0;
|
|
|
|
local_14 = param_3;
|
|
|
|
local_18 = 0;
|
|
|
|
uVar2 = FUN_00406db0();
|
|
|
|
if (uVar2 < 5) {
|
|
|
|
param_2 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar3 = FUN_00406db0();
|
|
|
|
param_2 = iVar3 - 4;
|
|
|
|
}
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
piVar4 = (int *)FUN_00406d80();
|
|
|
|
local_8 = *(int *)(*param_1 + 4);
|
|
|
|
local_c = local_8 - 4;
|
|
|
|
bVar1 = false;
|
|
|
|
uVar2 = param_2;
|
|
|
|
while ((param_2 != 0 && (uVar5 == 0))) {
|
|
|
|
local_4 = *piVar4;
|
|
|
|
if (local_c < param_2) {
|
|
|
|
if (bVar1) {
|
|
|
|
local_10 = uVar5;
|
|
|
|
FUN_00677cc0(&local_10,4,*(undefined4 *)(*param_1 + 0x14));
|
|
|
|
local_10 = local_10 & 0x7fffffff;
|
|
|
|
local_18 = *(int *)(*param_1 + 0x14);
|
|
|
|
*(uint *)(*param_1 + 0x14) = local_10;
|
|
|
|
*(int *)(*param_1 + 0x1c) = *(int *)(*param_1 + 0x1c) + -1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00677cc0(&local_18,4,local_14);
|
|
|
|
param_2 = uVar2;
|
|
|
|
if (local_18 == 0) {
|
|
|
|
local_10 = 0;
|
|
|
|
bVar1 = true;
|
|
|
|
FUN_00677cc0(&local_10,4,*(undefined4 *)(*param_1 + 0x14));
|
|
|
|
local_10 = local_10 & 0x7fffffff;
|
|
|
|
local_18 = *(int *)(*param_1 + 0x14);
|
|
|
|
*(uint *)(*param_1 + 0x14) = local_10;
|
|
|
|
*(int *)(*param_1 + 0x1c) = *(int *)(*param_1 + 0x1c) + -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if ((!bVar1) && (FUN_00677cc0(&local_18,4,local_14), local_18 != 0)) {
|
|
|
|
FUN_00674f50(local_18,*(undefined4 *)(*param_1 + 0x18),*(undefined4 *)(*param_1 + 0x1c),0);
|
|
|
|
}
|
|
|
|
local_8 = param_2 + 4;
|
|
|
|
local_18 = 0;
|
|
|
|
local_c = param_2;
|
|
|
|
}
|
|
|
|
*piVar4 = local_18;
|
|
|
|
uVar5 = FUN_00677d20(piVar4,local_8,local_14);
|
|
|
|
if (uVar5 == 0) {
|
|
|
|
*piVar4 = local_4;
|
|
|
|
param_2 = param_2 - local_c;
|
|
|
|
piVar4 = (int *)((int)piVar4 + local_c);
|
|
|
|
uVar2 = param_2;
|
|
|
|
local_14 = local_18;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return uVar5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675480 at 0x00675480 (size: 223) ---
|
|
|
|
|
|
char __thiscall FUN_00675480(int *param_1,undefined4 param_2,uint param_3,char param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
char local_5;
|
|
|
|
|
|
|
|
local_5 = '\x01';
|
|
|
|
FUN_004074b0(4,1);
|
|
|
|
puVar1 = (uint *)FUN_00406d80();
|
|
|
|
uVar2 = FUN_00406db0();
|
|
|
|
if (uVar2 < 5) {
|
|
|
|
iVar3 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar3 = FUN_00406db0();
|
|
|
|
iVar3 = iVar3 + -4;
|
|
|
|
}
|
|
|
|
param_2 = *(int *)(*param_1 + 4);
|
|
|
|
iVar5 = param_2 + -4;
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
local_5 = '\x01';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
if (param_3 == 0) break;
|
|
|
|
if (local_5 == '\0') {
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
uVar2 = *puVar1;
|
|
|
|
if (iVar3 < iVar5) {
|
|
|
|
param_2 = iVar3 + 4;
|
|
|
|
iVar5 = iVar3;
|
|
|
|
}
|
|
|
|
iVar4 = FUN_00677cc0(puVar1,param_2,param_3);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
param_3 = *puVar1;
|
|
|
|
*puVar1 = uVar2;
|
|
|
|
iVar3 = iVar3 - iVar5;
|
|
|
|
puVar1 = (uint *)((int)puVar1 + iVar5);
|
|
|
|
if ((int)param_3 < 0) {
|
|
|
|
param_3 = param_3 & 0x7fffffff;
|
|
|
|
goto LAB_0067552c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_0067552c:
|
|
|
|
local_5 = '\0';
|
|
|
|
}
|
|
|
|
} while (iVar3 != 0);
|
|
|
|
if (local_5 == '\0') {
|
|
|
|
return '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((param_3 != 0) || (iVar3 != 0)) && (param_4 == '\0')) {
|
|
|
|
local_5 = '\0';
|
|
|
|
}
|
|
|
|
return local_5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675560 at 0x00675560 (size: 117) ---
|
|
|
|
|
|
void FUN_00675560(undefined4 param_1,int *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
byte *pbVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
|
|
|
|
uVar1 = param_3;
|
|
|
|
uVar4 = param_3;
|
|
|
|
if ((*(byte *)(param_3 + 4) & 1) != 0) {
|
|
|
|
uVar4 = *(uint *)(*param_2 + 4);
|
|
|
|
}
|
|
|
|
param_3 = uVar4 & 0xff;
|
|
|
|
FUN_0040ad10(1);
|
|
|
|
pbVar2 = (byte *)FUN_0040acf0(1);
|
|
|
|
if (pbVar2 != (byte *)0x0) {
|
|
|
|
if ((*(byte *)(uVar1 + 4) & 1) == 0) {
|
|
|
|
param_3 = (uint)*pbVar2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*pbVar2 = (byte)uVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((*(byte *)(uVar1 + 4) & 5) == 0) {
|
|
|
|
uVar4 = param_3;
|
|
|
|
}
|
|
|
|
if ((~*(byte *)(uVar1 + 4) & 1) != 0) {
|
|
|
|
iVar3 = FUN_00677ab0(uVar4);
|
|
|
|
*param_2 = iVar3;
|
|
|
|
}
|
|
|
|
if ((undefined4 *)*param_2 != (undefined4 *)0x0) {
|
|
|
|
(*(code *)**(undefined4 **)*param_2)(uVar1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006755e0 at 0x006755E0 (size: 156) ---
|
|
|
|
|
|
undefined4 FUN_006755e0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined4 uVar4;
|
|
|
|
undefined1 local_34 [4];
|
|
|
|
undefined1 local_30 [12];
|
|
|
|
undefined1 local_24 [36];
|
|
|
|
|
|
|
|
FUN_00401600(0);
|
|
|
|
FUN_00675560(local_34,&stack0x00000004,local_24);
|
|
|
|
FUN_0040a900(local_30);
|
|
|
|
uVar1 = FUN_00406db0();
|
|
|
|
if (uVar1 < 0x41) {
|
|
|
|
uVar4 = 0x100;
|
|
|
|
uVar2 = FUN_00406db0(0x100);
|
|
|
|
uVar3 = FUN_00406d80(uVar2);
|
|
|
|
uVar2 = FUN_00677d20(uVar3,uVar2,uVar4);
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_0040b060();
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_0040b060();
|
|
|
|
return 0xffffff9b;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675680 at 0x00675680 (size: 32) ---
|
|
|
|
|
|
void FUN_00675680(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
FUN_00677220();
|
|
|
|
FUN_006755e0(local_c);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006756a0 at 0x006756A0 (size: 212) ---
|
|
|
|
|
|
int FUN_006756a0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
undefined1 local_30 [12];
|
|
|
|
undefined **local_24;
|
|
|
|
uint local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_004074b0(0x40,1);
|
|
|
|
uVar5 = 0x100;
|
|
|
|
uVar2 = FUN_00406db0(0x100);
|
|
|
|
uVar3 = FUN_00406d80(uVar2);
|
|
|
|
iVar4 = FUN_00677cc0(uVar3,uVar2,uVar5);
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
local_24 = &PTR_FUN_00793b3c;
|
|
|
|
local_20 = 0;
|
|
|
|
local_1c = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
local_24 = &PTR_FUN_00793b50;
|
|
|
|
FUN_0040b020(&PTR_PTR_008183b8,local_30);
|
|
|
|
piVar1 = param_1;
|
|
|
|
FUN_00675560(¶m_1,param_1,&local_24);
|
|
|
|
if (((local_20 >> 2 & 1) != 0) || (*(int *)(*piVar1 + 8) != 0x4c50)) {
|
|
|
|
iVar4 = -0x65;
|
|
|
|
}
|
|
|
|
FUN_0040b060();
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
return iVar4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675780 at 0x00675780 (size: 398) ---
|
|
|
|
|
|
int __thiscall FUN_00675780(int *param_1,int param_2,uint param_3,int param_4,int param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
uint *puVar5;
|
|
|
|
uint uVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
uint *puVar8;
|
|
|
|
uint uVar9;
|
|
|
|
uint uVar10;
|
|
|
|
undefined4 uVar11;
|
|
|
|
undefined4 uVar12;
|
|
|
|
undefined4 uVar13;
|
|
|
|
undefined1 auStack_c [12];
|
|
|
|
|
|
|
|
*param_1 = param_2;
|
|
|
|
uVar12 = 0;
|
|
|
|
*(bool *)(param_1 + 2) = ((byte)param_5 & 2) == 2;
|
|
|
|
uVar11 = param_4;
|
|
|
|
uVar13 = param_5;
|
|
|
|
uVar2 = FUN_00403350(¶m_2,0);
|
|
|
|
iVar3 = FUN_00677d80(uVar2,uVar11,uVar12,uVar13);
|
|
|
|
puVar7 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar7 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar7)(1);
|
|
|
|
}
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
iVar3 = *param_1;
|
|
|
|
uVar1 = *(uint *)(iVar3 + 4);
|
|
|
|
param_4 = (*(int *)(iVar3 + 8) + -0x400) / (int)uVar1;
|
|
|
|
*(int *)(iVar3 + 0x1c) = param_4;
|
|
|
|
puVar5 = (uint *)thunk_FUN_005df0f5(uVar1);
|
|
|
|
puVar8 = puVar5;
|
|
|
|
for (uVar6 = uVar1 >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*puVar8 = 0;
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
for (uVar6 = uVar1 & 3; uVar6 != 0; uVar6 = uVar6 - 1) {
|
|
|
|
*(undefined1 *)puVar8 = 0;
|
|
|
|
puVar8 = (uint *)((int)puVar8 + 1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*param_1 + 0x14) = 0x400;
|
|
|
|
uVar9 = 0x400;
|
|
|
|
param_5 = 0;
|
|
|
|
uVar6 = 0x400;
|
|
|
|
uVar10 = uVar9;
|
|
|
|
if (0 < param_4) {
|
|
|
|
do {
|
|
|
|
uVar9 = uVar10 + uVar1;
|
|
|
|
*puVar5 = uVar9 | 0x80000000;
|
|
|
|
param_3 = uVar10;
|
|
|
|
param_2 = FUN_00677d20(puVar5,uVar1,uVar10);
|
|
|
|
if (param_2 != 0) {
|
|
|
|
operator_delete__(puVar5);
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
param_5 = param_5 + 1;
|
|
|
|
param_2 = 0;
|
|
|
|
uVar10 = uVar9;
|
|
|
|
} while (param_5 < param_4);
|
|
|
|
param_2 = 0;
|
|
|
|
uVar6 = param_3;
|
|
|
|
}
|
|
|
|
*(uint *)(*param_1 + 0x18) = uVar6;
|
|
|
|
*puVar5 = 0x80000000;
|
|
|
|
param_2 = FUN_00677d20(puVar5,4,uVar6);
|
|
|
|
*(uint *)(*param_1 + 8) = uVar9;
|
|
|
|
operator_delete__(puVar5);
|
|
|
|
iVar3 = param_2;
|
|
|
|
if ((param_2 == 0) && (iVar3 = FUN_00677d20(*param_1,0x50,0x140), iVar3 == 0)) {
|
|
|
|
FUN_00677220();
|
|
|
|
FUN_006755e0(auStack_c);
|
|
|
|
iVar3 = 0;
|
|
|
|
}
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
return iVar3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675920 at 0x00675920 (size: 169) ---
|
|
|
|
|
|
void __thiscall
|
|
|
|
FUN_00675920(undefined4 *param_1,int *param_2,undefined4 param_3,undefined4 param_4,int param_5,
|
|
|
|
undefined4 param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
int iVar4;
|
|
|
|
int *piVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
undefined4 uVar7;
|
|
|
|
undefined4 uVar8;
|
|
|
|
|
|
|
|
piVar1 = param_2;
|
|
|
|
uVar7 = 0;
|
|
|
|
*param_1 = param_2;
|
|
|
|
*(bool *)(param_1 + 2) = ((byte)param_5 & 2) == 2;
|
|
|
|
uVar6 = param_4;
|
|
|
|
uVar8 = param_5;
|
|
|
|
uVar2 = FUN_00403350(¶m_2,0);
|
|
|
|
param_5 = FUN_00677d80(uVar2,uVar6,uVar7,uVar8);
|
|
|
|
piVar5 = param_2 + -5;
|
|
|
|
LVar3 = InterlockedDecrement(param_2 + -4);
|
|
|
|
if ((LVar3 == 0) && (piVar5 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar5)(1);
|
|
|
|
}
|
|
|
|
if (param_5 == 0) {
|
|
|
|
iVar4 = FUN_00677cc0(piVar1,0x50,0x140);
|
|
|
|
if (*piVar1 != 0x5442) {
|
|
|
|
FUN_00677c70();
|
|
|
|
iVar4 = -0x66;
|
|
|
|
}
|
|
|
|
if (iVar4 == 0) {
|
|
|
|
FUN_006756a0(param_6);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006759d0 at 0x006759D0 (size: 114) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006759d0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
param_1[3] = param_2[3];
|
|
|
|
param_1[4] = param_2[4];
|
|
|
|
if ((param_2[7] != 0) && (param_1[1] != 0)) {
|
|
|
|
puVar1 = (undefined4 *)thunk_FUN_005df0f5(param_1[1]);
|
|
|
|
uVar3 = param_1[1];
|
|
|
|
param_1[7] = puVar1;
|
|
|
|
puVar4 = (undefined4 *)param_2[7];
|
|
|
|
for (uVar2 = uVar3 >> 2; uVar2 != 0; uVar2 = uVar2 - 1) {
|
|
|
|
*puVar1 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar1 = puVar1 + 1;
|
|
|
|
}
|
|
|
|
for (uVar3 = uVar3 & 3; uVar3 != 0; uVar3 = uVar3 - 1) {
|
|
|
|
*(undefined1 *)puVar1 = *(undefined1 *)puVar4;
|
|
|
|
puVar4 = (undefined4 *)((int)puVar4 + 1);
|
|
|
|
puVar1 = (undefined4 *)((int)puVar1 + 1);
|
|
|
|
}
|
|
|
|
param_1[5] = param_1[7];
|
|
|
|
param_1[6] = param_1[7] + 0x10;
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675a50 at 0x00675A50 (size: 85) ---
|
|
|
|
|
|
void __thiscall FUN_00675a50(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
if ((*(int *)(param_1 + 0x1c) == 0) && (0 < param_2)) {
|
|
|
|
*(int *)(param_1 + 4) = param_2;
|
|
|
|
*(uint *)(param_1 + 8) = param_2 - 0x10U >> 2;
|
|
|
|
puVar1 = (undefined4 *)thunk_FUN_005df0f5(param_2);
|
|
|
|
*(undefined4 **)(param_1 + 0x1c) = puVar1;
|
|
|
|
*(undefined4 **)(param_1 + 0x14) = puVar1;
|
|
|
|
*puVar1 = 0;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
puVar1[2] = 0;
|
|
|
|
puVar1[3] = 0;
|
|
|
|
*(int *)(param_1 + 0x18) = *(int *)(param_1 + 0x1c) + 0x10;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675ab0 at 0x00675AB0 (size: 67) ---
|
|
|
|
|
|
undefined1 __fastcall FUN_00675ab0(char *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined1 uVar2;
|
|
|
|
|
|
|
|
uVar2 = 0;
|
|
|
|
if ((((*param_1 == '\0') && (*(int *)(param_1 + 0xf4) == 0)) && (*(int *)(param_1 + 0xf8) == 0))
|
|
|
|
&& (((iVar1 = *(int *)(param_1 + 0x100), *(int *)(iVar1 + 0x24) == 0 &&
|
|
|
|
(*(int *)(iVar1 + 0x28) == 0)) && (*(char *)(iVar1 + 0x2c) != '\0')))) {
|
|
|
|
uVar2 = 1;
|
|
|
|
*param_1 = '\x01';
|
|
|
|
param_1[1] = '\x01';
|
|
|
|
}
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675b00 at 0x00675B00 (size: 54) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00675b00(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[7] = 0;
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0xffffffff;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
if (0 < param_2) {
|
|
|
|
FUN_00675a50(param_2);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675b40 at 0x00675B40 (size: 64) ---
|
|
|
|
|
|
void __thiscall FUN_00675b40(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
iVar3 = *(int *)(param_1 + 0x10);
|
|
|
|
iVar2 = DAT_008f86e0;
|
|
|
|
while ((-1 < iVar3 && (DAT_008f86e0 == iVar2))) {
|
|
|
|
piVar1 = (int *)(*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0x10) * 4);
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*piVar1 = DAT_008f86e0;
|
|
|
|
iVar3 = *(int *)(param_1 + 0x10) + -1;
|
|
|
|
*(int *)(param_1 + 0x10) = iVar3;
|
|
|
|
}
|
|
|
|
*param_2 = iVar2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675b80 at 0x00675B80 (size: 80) ---
|
|
|
|
|
|
void __thiscall FUN_00675b80(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
iVar2 = DAT_008f86e0;
|
|
|
|
if (*(int *)(param_1 + 0xc) < *(int *)(*(int *)(param_1 + 0x14) + 0xc)) {
|
|
|
|
do {
|
|
|
|
if (DAT_008f86e0 != iVar2) break;
|
|
|
|
piVar1 = (int *)(*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0xc) * 4);
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*piVar1 = DAT_008f86e0;
|
|
|
|
iVar3 = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
*(int *)(param_1 + 0xc) = iVar3;
|
|
|
|
} while (iVar3 < *(int *)(*(int *)(param_1 + 0x14) + 0xc));
|
|
|
|
}
|
|
|
|
*param_2 = iVar2;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675bd0 at 0x00675BD0 (size: 93) ---
|
|
|
|
|
|
int * __thiscall FUN_00675bd0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = DAT_008f86e0;
|
|
|
|
if (*(int *)(param_1 + 0xc) < *(int *)(*(int *)(param_1 + 0x14) + 0xc)) {
|
|
|
|
do {
|
|
|
|
if (DAT_008f86e0 != *(int *)(*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0xc) * 4)) break;
|
|
|
|
*(int *)(param_1 + 0xc) = *(int *)(param_1 + 0xc) + 1;
|
|
|
|
} while (*(int *)(param_1 + 0xc) < *(int *)(*(int *)(param_1 + 0x14) + 0xc));
|
|
|
|
}
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x14) + 0xc) <= *(int *)(param_1 + 0xc)) {
|
|
|
|
*param_2 = iVar1;
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
*param_2 = *(int *)(*(int *)(param_1 + 0x18) + *(int *)(param_1 + 0xc) * 4);
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675c40 at 0x00675C40 (size: 344) ---
|
|
|
|
|
|
char __fastcall FUN_00675c40(char *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
if (((*param_1 == '\0') && (*(int *)(param_1 + 0xf4) == 0)) && (*(int *)(param_1 + 0xf8) == 0)) {
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x100) + 0x24) != 0) {
|
|
|
|
iVar2 = FUN_005df0f5(0x20);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar3 = (undefined4 *)FUN_00675b00(*(undefined4 *)(*(int *)(param_1 + 0x100) + 4));
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0xf4) = puVar3;
|
|
|
|
*puVar3 = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x24);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_00675480(&local_14,**(undefined4 **)(param_1 + 0xf4),0);
|
|
|
|
param_1[1] = '\0';
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x100) + 0x24) != *(int *)(*(int *)(param_1 + 0x100) + 0x28))
|
|
|
|
{
|
|
|
|
iVar2 = FUN_005df0f5(0x20);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
puVar3 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar3 = (undefined4 *)FUN_00675b00(*(undefined4 *)(*(int *)(param_1 + 0x100) + 4));
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0xf8) = puVar3;
|
|
|
|
*puVar3 = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x28);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf8) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf8) + 4));
|
|
|
|
FUN_00675480(&local_14,**(undefined4 **)(param_1 + 0xf8),0);
|
|
|
|
*param_1 = '\x01';
|
|
|
|
goto LAB_00675d7c;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = *(undefined4 *)(param_1 + 0xf4);
|
|
|
|
}
|
|
|
|
*param_1 = '\x01';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*param_1 = '\0';
|
|
|
|
}
|
|
|
|
LAB_00675d7c:
|
|
|
|
cVar1 = *param_1;
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675da0 at 0x00675DA0 (size: 143) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00675da0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
iVar2 = *(int *)(param_1 + 0xf4);
|
|
|
|
if (((*(int *)(iVar2 + 0x14) != 0) && (*(int *)(iVar2 + 0x18) != 0)) &&
|
|
|
|
(iVar3 = *(int *)(*(int *)(iVar2 + 0x14) + 0xc), iVar3 < *(int *)(iVar2 + 8))) {
|
|
|
|
*(undefined4 *)(*(int *)(iVar2 + 0x18) + iVar3 * 4) = param_2;
|
|
|
|
piVar1 = (int *)(*(int *)(iVar2 + 0x14) + 0xc);
|
|
|
|
*piVar1 = *piVar1 + 1;
|
|
|
|
}
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_006752a0(&local_14,**(undefined4 **)(param_1 + 0xf4));
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675e30 at 0x00675E30 (size: 308) ---
|
|
|
|
|
|
uint __thiscall FUN_00675e30(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
int iVar4;
|
|
|
|
uint uVar5;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
iVar2 = **(int **)(param_1 + 0xf4);
|
|
|
|
if ((iVar2 != 0) && (*(int *)(param_2 + 0xc) == iVar2)) {
|
|
|
|
*(undefined4 *)((*(int **)(param_1 + 0xf4))[5] + 4) = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_006752a0(&local_14,**(undefined4 **)(param_1 + 0xf4));
|
|
|
|
}
|
|
|
|
if (*(int *)(*(int *)(param_1 + 0x100) + 0x14) == *(int *)(param_2 + 0x10)) {
|
|
|
|
*(int *)(*(int *)(param_1 + 0x100) + 0x24) = *(int *)(param_2 + 0x10);
|
|
|
|
puVar3 = *(undefined4 **)(param_1 + 0xf4);
|
|
|
|
if (puVar3[7] != 0) {
|
|
|
|
*puVar3 = 0;
|
|
|
|
puVar3[3] = 0;
|
|
|
|
puVar3[4] = 0xffffffff;
|
|
|
|
puVar3 = (undefined4 *)puVar3[5];
|
|
|
|
*puVar3 = 0;
|
|
|
|
puVar3[1] = 0;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
puVar3[3] = 0;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0xf4);
|
|
|
|
if (((*(int *)(iVar2 + 0x14) != 0) && (*(int *)(iVar2 + 0x18) != 0)) &&
|
|
|
|
(iVar4 = *(int *)(*(int *)(iVar2 + 0x14) + 0xc), iVar4 < *(int *)(iVar2 + 8))) {
|
|
|
|
*(undefined4 *)(*(int *)(iVar2 + 0x18) + iVar4 * 4) = *(undefined4 *)(param_2 + 0x14);
|
|
|
|
piVar1 = (int *)(*(int *)(iVar2 + 0x14) + 0xc);
|
|
|
|
*piVar1 = *piVar1 + 1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(*(int *)(*(int *)(param_1 + 0xf4) + 0x14) + 8) = *(undefined4 *)(param_2 + 0xc);
|
|
|
|
**(undefined4 **)(param_1 + 0xf4) = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_00675150(&local_14,**(undefined4 **)(param_1 + 0xf4));
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
uVar5 = FUN_00406f90();
|
|
|
|
return uVar5 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00675f70 at 0x00675F70 (size: 358) ---
|
|
|
|
|
|
char __thiscall FUN_00675f70(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 local_34;
|
|
|
|
undefined4 local_30;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
int local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
void *local_4;
|
|
|
|
|
|
|
|
local_34 = 0;
|
|
|
|
local_30 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
iVar2 = *(int *)(*(int *)(param_1 + 0x100) + 4);
|
|
|
|
local_4 = (void *)0x0;
|
|
|
|
local_20 = 0;
|
|
|
|
local_1c = 0;
|
|
|
|
local_18 = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0xffffffff;
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
if (0 < iVar2) {
|
|
|
|
FUN_00675a50(iVar2);
|
|
|
|
}
|
|
|
|
iVar1 = local_c;
|
|
|
|
FUN_004073b0(local_4,local_1c);
|
|
|
|
iVar2 = *(int *)(param_2 + 0x10);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(*(int *)(param_1 + 0x100) + 0x28)) {
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x28) = *(undefined4 *)(param_2 + 0x14);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00675480(&local_34,iVar2,0);
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(iVar1 + 4)) {
|
|
|
|
*(undefined4 *)(iVar1 + 4) = *(undefined4 *)(param_2 + 0x14);
|
|
|
|
FUN_006752a0(&local_34,iVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_2 + 0x14);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(*(int *)(param_1 + 0x100) + 0x24)) {
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x24) = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_00675480(&local_34,iVar2,0);
|
|
|
|
if (*(int *)(param_2 + 0xc) == *(int *)(iVar1 + 8)) {
|
|
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(param_2 + 0x10);
|
|
|
|
FUN_006752a0(&local_34,iVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar2 = FUN_00674f50(*(undefined4 *)(param_2 + 0xc),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x18),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x1c),1);
|
|
|
|
if (local_4 != (void *)0x0) {
|
|
|
|
operator_delete__(local_4);
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return '\x01' - (iVar2 != 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006760e0 at 0x006760E0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006760e0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007fed0c;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676120 at 0x00676120 (size: 276) ---
|
|
|
|
|
|
uint __thiscall FUN_00676120(int param_1,undefined4 param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined1 local_18 [12];
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0xf8) == 0) {
|
|
|
|
puVar1 = (undefined4 *)FUN_005df0f5(0x20);
|
|
|
|
if (puVar1 == (undefined4 *)0x0) {
|
|
|
|
puVar1 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = *(int *)(*(int *)(param_1 + 0x100) + 4);
|
|
|
|
puVar1[7] = 0;
|
|
|
|
*puVar1 = 0;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
puVar1[2] = 0;
|
|
|
|
puVar1[3] = 0;
|
|
|
|
puVar1[4] = 0xffffffff;
|
|
|
|
puVar1[5] = 0;
|
|
|
|
puVar1[6] = 0;
|
|
|
|
if (0 < iVar2) {
|
|
|
|
FUN_00675a50(iVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 **)(param_1 + 0xf4) = puVar1;
|
|
|
|
*(undefined4 **)(param_1 + 0xf8) = puVar1;
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x28) =
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0x100) + 0x14);
|
|
|
|
*(undefined1 *)(param_1 + 1) = 0;
|
|
|
|
}
|
|
|
|
else if (*(int *)(param_1 + 0xf8) == *(int *)(param_1 + 0xf4)) {
|
|
|
|
iVar2 = FUN_005df0f5(0x20);
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
iVar2 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = FUN_006759d0(*(undefined4 *)(param_1 + 0xf4));
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0xf8) = iVar2;
|
|
|
|
*(undefined4 *)(*(int *)(iVar2 + 0x14) + 4) = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x14);
|
|
|
|
}
|
|
|
|
FUN_00677920();
|
|
|
|
local_c = **(undefined4 **)(param_1 + 0xf4);
|
|
|
|
local_8 = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x14);
|
|
|
|
local_4 = param_2;
|
|
|
|
FUN_006755e0(local_18);
|
|
|
|
uVar3 = FUN_00675e30(local_18);
|
|
|
|
if (param_3 != '\0') {
|
|
|
|
uVar3 = FUN_00675680();
|
|
|
|
}
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676240 at 0x00676240 (size: 535) ---
|
|
|
|
|
|
uint __thiscall FUN_00676240(int param_1,undefined4 *param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int *piVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
undefined4 local_2c;
|
|
|
|
undefined4 local_28;
|
|
|
|
undefined1 local_18 [12];
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_2c = 0;
|
|
|
|
local_28 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
FUN_006772a0();
|
|
|
|
local_c = *param_2;
|
|
|
|
local_8 = *(undefined4 *)(param_2[5] + 8);
|
|
|
|
local_4 = *(undefined4 *)(param_2[5] + 4);
|
|
|
|
FUN_006755e0(local_18);
|
|
|
|
FUN_00675f70(local_18);
|
|
|
|
if (param_3 != '\0') {
|
|
|
|
FUN_00675680();
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_2[5] + 4);
|
|
|
|
if (*(int *)(param_2[5] + 8) == 0) {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
puVar2 = *(undefined4 **)(param_1 + 0xf8);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = 0xffffffff;
|
|
|
|
puVar2[5] = 0;
|
|
|
|
puVar2[6] = 0;
|
|
|
|
if ((void *)puVar2[7] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)puVar2[7]);
|
|
|
|
puVar2[7] = 0;
|
|
|
|
}
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xf4) = 0;
|
|
|
|
goto LAB_006763d1;
|
|
|
|
}
|
|
|
|
puVar2 = *(undefined4 **)(param_1 + 0xf8);
|
|
|
|
if (puVar2[7] != 0) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = 0xffffffff;
|
|
|
|
puVar2 = (undefined4 *)puVar2[5];
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
}
|
|
|
|
**(undefined4 **)(param_1 + 0xf8) = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x28);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf8) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf8) + 4));
|
|
|
|
uVar5 = **(undefined4 **)(param_1 + 0xf8);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (iVar1 != 0) goto LAB_006763d1;
|
|
|
|
puVar2 = *(undefined4 **)(param_1 + 0xf4);
|
|
|
|
if (puVar2[7] != 0) {
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
puVar2[4] = 0xffffffff;
|
|
|
|
puVar2 = (undefined4 *)puVar2[5];
|
|
|
|
*puVar2 = 0;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
}
|
|
|
|
**(undefined4 **)(param_1 + 0xf4) = *(undefined4 *)(*(int *)(param_1 + 0x100) + 0x24);
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
uVar5 = **(undefined4 **)(param_1 + 0xf4);
|
|
|
|
}
|
|
|
|
FUN_00675480(&local_2c,uVar5,0);
|
|
|
|
LAB_006763d1:
|
|
|
|
if ((*(int **)(param_1 + 0xf4) != (int *)0x0) &&
|
|
|
|
(piVar3 = *(int **)(param_1 + 0xf8), **(int **)(param_1 + 0xf4) == *piVar3)) {
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
*piVar3 = 0;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
piVar3[2] = 0;
|
|
|
|
piVar3[3] = 0;
|
|
|
|
piVar3[4] = -1;
|
|
|
|
piVar3[5] = 0;
|
|
|
|
piVar3[6] = 0;
|
|
|
|
if ((void *)piVar3[7] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)piVar3[7]);
|
|
|
|
piVar3[7] = 0;
|
|
|
|
}
|
|
|
|
operator_delete(piVar3);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0xf8) = *(int *)(param_1 + 0xf4);
|
|
|
|
*(undefined4 *)(*(int *)(*(int *)(param_1 + 0xf4) + 0x14) + 4) = 0;
|
|
|
|
*(undefined4 *)(*(int *)(*(int *)(param_1 + 0xf8) + 0x14) + 8) = 0;
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
uVar4 = FUN_00406f90();
|
|
|
|
return uVar4 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676460 at 0x00676460 (size: 467) ---
|
|
|
|
|
|
uint * __thiscall FUN_00676460(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
bool bVar4;
|
|
|
|
uint *puVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
uint uVar7;
|
|
|
|
undefined1 local_20 [4];
|
|
|
|
undefined1 local_1c [4];
|
|
|
|
undefined1 local_18 [4];
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
|
|
|
|
uVar7 = DAT_008f86e0;
|
|
|
|
bVar4 = false;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
if (*(int *)(param_1 + 0xf8) != 0) {
|
|
|
|
do {
|
|
|
|
if (DAT_008f86e0 != uVar7) break;
|
|
|
|
puVar5 = (uint *)FUN_00675bd0(local_20);
|
|
|
|
uVar7 = *puVar5;
|
|
|
|
if (DAT_008f86e0 == uVar7) {
|
|
|
|
if (bVar4) {
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_006752a0(&local_14,**(undefined4 **)(param_1 + 0xf4));
|
|
|
|
bVar4 = false;
|
|
|
|
}
|
|
|
|
FUN_00676240(*(undefined4 *)(param_1 + 0xf8),1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
for (puVar5 = *(uint **)(*(int *)(param_1 + 0x68) + (uVar7 % *(uint *)(param_1 + 0x70)) * 4)
|
|
|
|
; puVar5 != (uint *)0x0; puVar5 = (uint *)puVar5[1]) {
|
|
|
|
if (*puVar5 == uVar7) {
|
|
|
|
if (puVar5 != (uint *)0x0) {
|
|
|
|
puVar6 = (undefined4 *)FUN_00675b80(local_1c);
|
|
|
|
iVar2 = *(int *)(param_1 + 0xf4);
|
|
|
|
if (((*(int *)(iVar2 + 0x14) == 0) || (*(int *)(iVar2 + 0x18) == 0)) ||
|
|
|
|
(*(int *)(iVar2 + 8) <= *(int *)(*(int *)(iVar2 + 0x14) + 0xc))) {
|
|
|
|
FUN_00676120(*puVar6,0);
|
|
|
|
bVar4 = false;
|
|
|
|
uVar7 = DAT_008f86e0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (((*(int *)(iVar2 + 0x14) != 0) && (*(int *)(iVar2 + 0x18) != 0)) &&
|
|
|
|
(iVar3 = *(int *)(*(int *)(iVar2 + 0x14) + 0xc), iVar3 < *(int *)(iVar2 + 8))) {
|
|
|
|
*(undefined4 *)(*(int *)(iVar2 + 0x18) + iVar3 * 4) = *puVar6;
|
|
|
|
piVar1 = (int *)(*(int *)(iVar2 + 0x14) + 0xc);
|
|
|
|
*piVar1 = *piVar1 + 1;
|
|
|
|
}
|
|
|
|
bVar4 = true;
|
|
|
|
uVar7 = DAT_008f86e0;
|
|
|
|
}
|
|
|
|
goto LAB_006765d5;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (puVar5 = *(uint **)(*(int *)(param_1 + 0xe4) + (uVar7 % *(uint *)(param_1 + 0xec)) * 4)
|
|
|
|
; puVar5 != (uint *)0x0; puVar5 = (uint *)puVar5[1]) {
|
|
|
|
if (*puVar5 == uVar7) {
|
|
|
|
if (puVar5 != (uint *)0x0) {
|
|
|
|
FUN_00675b80(local_18);
|
|
|
|
uVar7 = DAT_008f86e0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LAB_006765d5:
|
|
|
|
} while (*(int *)(param_1 + 0xf8) != 0);
|
|
|
|
if (bVar4) {
|
|
|
|
FUN_004073b0(*(undefined4 *)(*(int *)(param_1 + 0xf4) + 0x1c),
|
|
|
|
*(undefined4 *)(*(int *)(param_1 + 0xf4) + 4));
|
|
|
|
FUN_006752a0(&local_14,**(undefined4 **)(param_1 + 0xf4));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_2 = uVar7;
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676640 at 0x00676640 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00676640(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007fed0c;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006766d0 at 0x006766D0 (size: 202) ---
|
|
|
|
|
|
uint __thiscall FUN_006766d0(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
int *piVar5;
|
|
|
|
|
|
|
|
if (param_2 == *(uint *)(param_1 + 0x68)) {
|
|
|
|
return param_2 & 0xffffff00;
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar1 = 0;
|
|
|
|
do {
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(param_2);
|
|
|
|
while (iVar1 != 0) {
|
|
|
|
iVar3 = *(int *)(iVar1 + 4);
|
|
|
|
FUN_006768b0(iVar1);
|
|
|
|
iVar1 = iVar3;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
iVar4 = *piVar5;
|
|
|
|
goto LAB_0067671e;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
piVar5 = (int *)0x0;
|
|
|
|
iVar4 = 0;
|
|
|
|
LAB_0067671e:
|
|
|
|
iVar3 = *piVar5;
|
|
|
|
if (iVar3 == iVar4) {
|
|
|
|
LAB_00676731:
|
|
|
|
*piVar5 = *(int *)(iVar3 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
iVar2 = iVar3;
|
|
|
|
iVar3 = *(int *)(iVar2 + 4);
|
|
|
|
} while (iVar3 != iVar4);
|
|
|
|
if (iVar2 == 0) goto LAB_00676731;
|
|
|
|
*(undefined4 *)(iVar2 + 4) = *(undefined4 *)(iVar3 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
*(int *)(iVar4 + 4) = iVar1;
|
|
|
|
iVar3 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar1 = iVar4;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006767a0 at 0x006767A0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_006767a0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_006766d0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006767f0 at 0x006767F0 (size: 83) ---
|
|
|
|
|
|
uint * __thiscall FUN_006767f0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
while (*puVar1 != *param_2) {
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return (uint *)0x0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
FUN_00410880(puVar1 + 2);
|
|
|
|
FUN_004171e0(param_2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return puVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676850 at 0x00676850 (size: 81) ---
|
|
|
|
|
|
void __fastcall FUN_00676850(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
|
|
|
|
do {
|
|
|
|
piVar1 = *(int **)(param_1 + 0x70);
|
|
|
|
if (piVar1 == (int *)0x0) break;
|
|
|
|
if ((int *)piVar1[1] == (int *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
*(int *)(param_1 + 0x70) = iVar2;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
*(undefined4 *)(iVar2 + 4) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar1[1] = *piVar1;
|
|
|
|
}
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
puVar3 = *(undefined4 **)(*(int *)(param_1 + 0x74) + 4);
|
|
|
|
*(undefined4 **)(param_1 + 0x74) = puVar3;
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
*puVar3 = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)(*piVar1 + 4) = piVar1[1];
|
|
|
|
}
|
|
|
|
*piVar1 = 0;
|
|
|
|
piVar1[1] = 0;
|
|
|
|
} while (piVar1 != (int *)0x0);
|
|
|
|
FUN_005870f0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006768b0 at 0x006768B0 (size: 62) ---
|
|
|
|
|
|
void __thiscall FUN_006768b0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_006767a0();
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
param_2[1] = *puVar1;
|
|
|
|
*puVar1 = (uint)param_2;
|
|
|
|
if (puVar1 < *(uint **)(param_1 + 100)) {
|
|
|
|
*(uint **)(param_1 + 100) = puVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006768f0 at 0x006768F0 (size: 102) ---
|
|
|
|
|
|
uint __thiscall FUN_006768f0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
pvVar2 = (void *)FUN_004171e0(¶m_2);
|
|
|
|
if (pvVar2 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0xf4);
|
|
|
|
if ((((iVar1 != 0) && (*(int *)(iVar1 + 0x14) != 0)) && (*(int *)(iVar1 + 0x18) != 0)) &&
|
|
|
|
(*(int *)(*(int *)(iVar1 + 0x14) + 0xc) < *(int *)(iVar1 + 8))) {
|
|
|
|
uVar3 = FUN_00675da0(param_2);
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
uVar3 = FUN_00676120(param_2,0);
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676960 at 0x00676960 (size: 627) ---
|
|
|
|
|
|
void __thiscall FUN_00676960(int param_1,uint param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
int *piVar4;
|
|
|
|
int *piVar5;
|
|
|
|
int *piVar6;
|
|
|
|
int *local_58;
|
|
|
|
undefined4 local_54;
|
|
|
|
undefined4 local_50;
|
|
|
|
int local_40;
|
|
|
|
undefined4 local_3c;
|
|
|
|
undefined4 local_38;
|
|
|
|
int local_34;
|
|
|
|
int local_30;
|
|
|
|
undefined4 local_2c;
|
|
|
|
undefined4 local_28;
|
|
|
|
void *local_24;
|
|
|
|
int local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
undefined4 local_18;
|
|
|
|
undefined4 local_14;
|
|
|
|
undefined4 local_10;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
void *local_4;
|
|
|
|
|
|
|
|
iVar3 = *(int *)(*(int *)(param_1 + 0x100) + 4);
|
|
|
|
local_24 = (void *)0x0;
|
|
|
|
local_40 = 0;
|
|
|
|
local_3c = 0;
|
|
|
|
local_38 = 0;
|
|
|
|
local_34 = 0;
|
|
|
|
local_30 = 0xffffffff;
|
|
|
|
local_2c = 0;
|
|
|
|
local_28 = 0;
|
|
|
|
if (0 < iVar3) {
|
|
|
|
FUN_00675a50(iVar3);
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)(*(int *)(param_1 + 0x100) + 4);
|
|
|
|
local_4 = (void *)0x0;
|
|
|
|
local_20 = 0;
|
|
|
|
local_1c = 0;
|
|
|
|
local_18 = 0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_10 = 0xffffffff;
|
|
|
|
local_c = 0;
|
|
|
|
local_8 = 0;
|
|
|
|
if (0 < iVar3) {
|
|
|
|
FUN_00675a50(iVar3);
|
|
|
|
}
|
|
|
|
local_58 = &local_20;
|
|
|
|
piVar5 = &local_40;
|
|
|
|
piVar6 = &local_40;
|
|
|
|
local_54 = 0;
|
|
|
|
local_50 = 0;
|
|
|
|
FUN_00406d60();
|
|
|
|
iVar3 = param_2;
|
|
|
|
local_40 = param_2;
|
|
|
|
FUN_004073b0(local_24,local_3c);
|
|
|
|
FUN_00675480(&local_54,iVar3,0);
|
|
|
|
local_34 = param_3;
|
|
|
|
local_30 = param_3 + -1;
|
|
|
|
puVar2 = (uint *)FUN_00675b40(¶m_2);
|
|
|
|
param_2 = *puVar2;
|
|
|
|
if (DAT_008f86e0 != param_2) {
|
|
|
|
do {
|
|
|
|
piVar4 = local_58;
|
|
|
|
for (puVar2 = *(uint **)(*(int *)(param_1 + 0xe4) + (param_2 % *(uint *)(param_1 + 0xec)) * 4)
|
|
|
|
; puVar2 != (uint *)0x0; puVar2 = (uint *)puVar2[1]) {
|
|
|
|
if (*puVar2 == param_2) {
|
|
|
|
if (puVar2 != (uint *)0x0) goto LAB_00676ab2;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (0 < piVar6[3]) {
|
|
|
|
iVar3 = piVar6[3] + -1;
|
|
|
|
piVar6[3] = iVar3;
|
|
|
|
*(uint *)(piVar6[6] + iVar3 * 4) = param_2;
|
|
|
|
}
|
|
|
|
FUN_00587370(¶m_2);
|
|
|
|
LAB_00676ab2:
|
|
|
|
if (piVar6[3] < 1) {
|
|
|
|
FUN_004073b0(piVar6[7],piVar6[1]);
|
|
|
|
FUN_006752a0(&local_54,*piVar6);
|
|
|
|
}
|
|
|
|
if (piVar5[4] < 0) {
|
|
|
|
if (piVar5 == piVar6) {
|
|
|
|
local_58 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 *)(piVar6[5] + 8) = *(undefined4 *)(piVar5[5] + 8);
|
|
|
|
FUN_00676240(piVar5,1);
|
|
|
|
piVar4 = piVar5;
|
|
|
|
}
|
|
|
|
piVar5 = piVar4;
|
|
|
|
if (*(int *)(piVar6[5] + 8) != 0) {
|
|
|
|
*piVar4 = *(int *)(piVar6[5] + 8);
|
|
|
|
FUN_004073b0(piVar4[7],piVar4[1]);
|
|
|
|
FUN_00675480(&local_54,*piVar4,0);
|
|
|
|
iVar3 = *(int *)(piVar4[5] + 0xc);
|
|
|
|
piVar4[4] = iVar3 + -1;
|
|
|
|
piVar4[3] = iVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar4 = piVar6;
|
|
|
|
if (piVar6[3] < 1) {
|
|
|
|
piVar4 = piVar5;
|
|
|
|
local_58 = piVar6;
|
|
|
|
}
|
|
|
|
iVar3 = piVar5[4];
|
|
|
|
param_2 = DAT_008f86e0;
|
|
|
|
while ((-1 < iVar3 && (DAT_008f86e0 == param_2))) {
|
|
|
|
iVar1 = piVar5[4];
|
|
|
|
param_2 = *(uint *)(piVar5[6] + iVar1 * 4);
|
|
|
|
iVar3 = iVar1 + -1;
|
|
|
|
*(uint *)(piVar5[6] + iVar1 * 4) = DAT_008f86e0;
|
|
|
|
piVar5[4] = iVar3;
|
|
|
|
}
|
|
|
|
piVar6 = piVar4;
|
|
|
|
} while (DAT_008f86e0 != param_2);
|
|
|
|
}
|
|
|
|
FUN_00406f90();
|
|
|
|
FUN_00406f90();
|
|
|
|
if (local_4 != (void *)0x0) {
|
|
|
|
operator_delete__(local_4);
|
|
|
|
}
|
|
|
|
if (local_24 != (void *)0x0) {
|
|
|
|
operator_delete__(local_24);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676be0 at 0x00676BE0 (size: 68) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00676be0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x6c) == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x74);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
FUN_00410880(iVar1);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
pvVar2 = (void *)(iVar1 + -8);
|
|
|
|
goto LAB_00676c06;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pvVar2 = (void *)0x0;
|
|
|
|
LAB_00676c06:
|
|
|
|
FUN_004171e0(pvVar2);
|
|
|
|
if (pvVar2 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676c30 at 0x00676C30 (size: 120) ---
|
|
|
|
|
|
uint __thiscall FUN_00676c30(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00676c5b:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_006767a0();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_00676c5b;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676cb0 at 0x00676CB0 (size: 124) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00676cb0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
undefined3 uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_00676cdb:
|
|
|
|
FUN_00676c30(param_2);
|
|
|
|
LAB_00676ce3:
|
|
|
|
puVar1 = param_2 + 2;
|
|
|
|
*puVar1 = *(uint *)(param_1 + 0x70);
|
|
|
|
uVar2 = (undefined3)((uint)puVar1 >> 8);
|
|
|
|
if (*(int *)(param_1 + 0x70) != 0) {
|
|
|
|
*(uint **)(*(int *)(param_1 + 0x70) + 4) = puVar1;
|
|
|
|
*(uint **)(param_1 + 0x70) = puVar1;
|
|
|
|
param_2[3] = 0;
|
|
|
|
return CONCAT31(uVar2,1);
|
|
|
|
}
|
|
|
|
*(uint **)(param_1 + 0x74) = puVar1;
|
|
|
|
*(uint **)(param_1 + 0x70) = puVar1;
|
|
|
|
param_2[3] = 0;
|
|
|
|
return CONCAT31(uVar2,1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
FUN_00410880(param_2 + 2);
|
|
|
|
goto LAB_00676ce3;
|
|
|
|
}
|
|
|
|
goto LAB_00676cdb;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676d30 at 0x00676D30 (size: 103) ---
|
|
|
|
|
|
undefined1 * __thiscall FUN_00676d30(undefined1 *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 1;
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
FUN_00676640(0x400);
|
|
|
|
*(undefined4 *)(param_1 + 0x78) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x7c) = 0;
|
|
|
|
*(undefined ***)(param_1 + 0x80) = &PTR_FUN_007e2f20;
|
|
|
|
FUN_00587060(0x400);
|
|
|
|
*(undefined4 *)(param_1 + 0xfc) = param_2;
|
|
|
|
*(undefined4 *)(param_1 + 0xf4) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x100) = param_3;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676da0 at 0x00676DA0 (size: 268) ---
|
|
|
|
|
|
void __fastcall FUN_00676da0(undefined1 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
puVar1 = *(undefined4 **)(param_1 + 0xf4);
|
|
|
|
*param_1 = 0;
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
*puVar1 = 0;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
puVar1[2] = 0;
|
|
|
|
puVar1[3] = 0;
|
|
|
|
puVar1[4] = 0xffffffff;
|
|
|
|
puVar1[5] = 0;
|
|
|
|
puVar1[6] = 0;
|
|
|
|
if ((void *)puVar1[7] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)puVar1[7]);
|
|
|
|
puVar1[7] = 0;
|
|
|
|
}
|
|
|
|
operator_delete(puVar1);
|
|
|
|
}
|
|
|
|
puVar1 = *(undefined4 **)(param_1 + 0xf8);
|
|
|
|
*(undefined4 *)(param_1 + 0xf4) = 0;
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
*puVar1 = 0;
|
|
|
|
puVar1[1] = 0;
|
|
|
|
puVar1[2] = 0;
|
|
|
|
puVar1[3] = 0;
|
|
|
|
puVar1[4] = 0xffffffff;
|
|
|
|
puVar1[5] = 0;
|
|
|
|
puVar1[6] = 0;
|
|
|
|
if ((void *)puVar1[7] != (void *)0x0) {
|
|
|
|
operator_delete__((void *)puVar1[7]);
|
|
|
|
puVar1[7] = 0;
|
|
|
|
}
|
|
|
|
operator_delete(puVar1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xf8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xfc) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x100) = 0;
|
|
|
|
*(undefined ***)(param_1 + 0x80) = &PTR_FUN_007e2f20;
|
|
|
|
FUN_005870f0();
|
|
|
|
*(undefined ***)(param_1 + 0x84) = &PTR_FUN_007e2f1c;
|
|
|
|
if (*(undefined1 **)(param_1 + 0xe4) != param_1 + 0x88) {
|
|
|
|
operator_delete__(*(undefined1 **)(param_1 + 0xe4));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0xe4) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xe8) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xec) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0xf0) = 0;
|
|
|
|
FUN_00676850();
|
|
|
|
*(undefined ***)(param_1 + 8) = &PTR_FUN_007fed0c;
|
|
|
|
if (*(undefined1 **)(param_1 + 0x68) != param_1 + 0xc) {
|
|
|
|
operator_delete__(*(undefined1 **)(param_1 + 0x68));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x70) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x74) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676eb0 at 0x00676EB0 (size: 49) ---
|
|
|
|
|
|
void FUN_00676eb0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
pvVar1 = (void *)FUN_006767f0(&stack0x00000004);
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
FUN_00587370(&stack0x00000004);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00676ef0 at 0x00676EF0 (size: 347) ---
|
|
|
|
|
|
uint __fastcall FUN_00676ef0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int *piVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
int iVar4;
|
|
|
|
int iVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint *puVar9;
|
|
|
|
uint local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = *(undefined4 **)(param_1 + 0xf4);
|
|
|
|
uVar8 = 0;
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
local_4 = *puVar1;
|
|
|
|
local_8 = *(undefined4 *)(puVar1[5] + 0xc);
|
|
|
|
LAB_00676f20:
|
|
|
|
puVar9 = (uint *)0x0;
|
|
|
|
if (*(int *)(param_1 + 0x74) != 0) {
|
|
|
|
piVar2 = *(int **)(param_1 + 0x7c);
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
if ((int *)piVar2[1] == (int *)0x0) {
|
|
|
|
iVar4 = **(int **)(param_1 + 0x78);
|
|
|
|
*(int *)(param_1 + 0x78) = iVar4;
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
*(undefined4 *)(iVar4 + 4) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)piVar2[1] = *piVar2;
|
|
|
|
}
|
|
|
|
if (*piVar2 == 0) {
|
|
|
|
puVar1 = *(undefined4 **)(*(int *)(param_1 + 0x7c) + 4);
|
|
|
|
*(undefined4 **)(param_1 + 0x7c) = puVar1;
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
*puVar1 = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(int *)(*piVar2 + 4) = piVar2[1];
|
|
|
|
}
|
|
|
|
*piVar2 = 0;
|
|
|
|
piVar2[1] = 0;
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
puVar9 = (uint *)(piVar2 + -2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar8 = *puVar9 % *(uint *)(param_1 + 0x70);
|
|
|
|
puVar7 = *(uint **)(*(int *)(param_1 + 0x68) + uVar8 * 4);
|
|
|
|
for (puVar3 = puVar7; puVar3 != (uint *)0x0; puVar3 = (uint *)puVar3[1]) {
|
|
|
|
if (*puVar3 == *puVar9) {
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
if (puVar7 != puVar3) goto LAB_00676fa5;
|
|
|
|
goto LAB_00676fb2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto LAB_00676fc3;
|
|
|
|
}
|
|
|
|
uVar8 = FUN_00676960(local_4,local_8);
|
|
|
|
}
|
|
|
|
return uVar8 & 0xffffff00;
|
|
|
|
LAB_00676fa5:
|
|
|
|
do {
|
|
|
|
puVar6 = puVar7;
|
|
|
|
puVar7 = (uint *)puVar6[1];
|
|
|
|
} while (puVar7 != puVar3);
|
|
|
|
if (puVar6 == (uint *)0x0) {
|
|
|
|
LAB_00676fb2:
|
|
|
|
*(uint *)(*(int *)(param_1 + 0x68) + uVar8 * 4) = puVar7[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar6[1] = puVar7[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x74) = *(int *)(param_1 + 0x74) + -1;
|
|
|
|
LAB_00676fc3:
|
|
|
|
uVar8 = *puVar9;
|
|
|
|
local_c = uVar8;
|
|
|
|
operator_delete(puVar9);
|
|
|
|
iVar4 = *(int *)(param_1 + 0xf4);
|
|
|
|
if (((*(int *)(iVar4 + 0x14) == 0) || (*(int *)(iVar4 + 0x18) == 0)) ||
|
|
|
|
(*(int *)(iVar4 + 8) <= *(int *)(*(int *)(iVar4 + 0x14) + 0xc))) {
|
|
|
|
FUN_00676120(uVar8,0);
|
|
|
|
}
|
|
|
|
else if (((*(int *)(iVar4 + 0x14) != 0) && (*(int *)(iVar4 + 0x18) != 0)) &&
|
|
|
|
(iVar5 = *(int *)(*(int *)(iVar4 + 0x14) + 0xc), iVar5 < *(int *)(iVar4 + 8))) {
|
|
|
|
*(uint *)(*(int *)(iVar4 + 0x18) + iVar5 * 4) = uVar8;
|
|
|
|
piVar2 = (int *)(*(int *)(iVar4 + 0x14) + 0xc);
|
|
|
|
*piVar2 = *piVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_00587370(&local_c);
|
|
|
|
goto LAB_00676f20;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677050 at 0x00677050 (size: 69) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00677050(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
while (*puVar1 != *param_2) {
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
uVar2 = FUN_00676cb0();
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006770a0 at 0x006770A0 (size: 117) ---
|
|
|
|
|
|
uint __thiscall FUN_006770a0(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
undefined3 uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_006770cb:
|
|
|
|
FUN_00676c30(param_2);
|
|
|
|
puVar1 = param_2 + 2;
|
|
|
|
*puVar1 = *(uint *)(param_1 + 0x70);
|
|
|
|
uVar2 = (undefined3)((uint)puVar1 >> 8);
|
|
|
|
if (*(int *)(param_1 + 0x70) != 0) {
|
|
|
|
*(uint **)(*(int *)(param_1 + 0x70) + 4) = puVar1;
|
|
|
|
*(uint **)(param_1 + 0x70) = puVar1;
|
|
|
|
param_2[3] = 0;
|
|
|
|
return CONCAT31(uVar2,1);
|
|
|
|
}
|
|
|
|
*(uint **)(param_1 + 0x74) = puVar1;
|
|
|
|
*(uint **)(param_1 + 0x70) = puVar1;
|
|
|
|
param_2[3] = 0;
|
|
|
|
return CONCAT31(uVar2,1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_006770cb;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677120 at 0x00677120 (size: 147) ---
|
|
|
|
|
|
char __thiscall FUN_00677120(int param_1,uint *param_2,undefined1 *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
|
|
|
|
puVar2 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
LAB_0067714b:
|
|
|
|
puVar2 = (uint *)FUN_005df0f5(0x14);
|
|
|
|
if (puVar2 == (uint *)0x0) {
|
|
|
|
puVar2 = (uint *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_2;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
puVar2[3] = 0;
|
|
|
|
*(undefined1 *)(puVar2 + 4) = *param_3;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_006770a0(puVar2);
|
|
|
|
if ((cVar1 == '\0') && (puVar2 != (uint *)0x0)) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
if (*puVar2 == *param_2) {
|
|
|
|
if (puVar2 != (uint *)0x0) {
|
|
|
|
cVar1 = FUN_00677050(param_2);
|
|
|
|
return cVar1;
|
|
|
|
}
|
|
|
|
goto LAB_0067714b;
|
|
|
|
}
|
|
|
|
puVar2 = (uint *)puVar2[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006771c0 at 0x006771C0 (size: 81) ---
|
|
|
|
|
|
void __fastcall FUN_006771c0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
undefined4 uStack_4;
|
|
|
|
|
|
|
|
uStack_4 = param_1;
|
|
|
|
pvVar1 = (void *)FUN_004171e0(&stack0x00000004);
|
|
|
|
if (pvVar1 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
uStack_4 = CONCAT13(1,(undefined3)uStack_4);
|
|
|
|
FUN_00677120(&stack0x00000004,(int)&uStack_4 + 3);
|
|
|
|
if (0xfff < *(uint *)(param_1 + 0x74)) {
|
|
|
|
FUN_00676be0();
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677220 at 0x00677220 (size: 23) ---
|
|
|
|
|
|
void __fastcall FUN_00677220(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007fed10;
|
|
|
|
param_1[1] = 0;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677240 at 0x00677240 (size: 40) ---
|
|
|
|
|
|
void __fastcall FUN_00677240(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 4;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007fed60;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677270 at 0x00677270 (size: 37) ---
|
|
|
|
|
|
void __fastcall FUN_00677270(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 6;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007fedb0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006772a0 at 0x006772A0 (size: 34) ---
|
|
|
|
|
|
void __fastcall FUN_006772a0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 9;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007fee00;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006772d0 at 0x006772D0 (size: 56) ---
|
|
|
|
|
|
void __thiscall FUN_006772d0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 8);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 8) = *puVar1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677310 at 0x00677310 (size: 186) ---
|
|
|
|
|
|
void __thiscall FUN_00677310(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 8) = *puVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 8);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar1 = (undefined4 *)(param_1 + 0xc);
|
|
|
|
FUN_0040ad10(0x18);
|
|
|
|
puVar2 = (undefined4 *)FUN_0040acf0(0x18);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
iVar3 = 6;
|
|
|
|
puVar4 = puVar2;
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
puVar4 = puVar1;
|
|
|
|
puVar1 = puVar2;
|
|
|
|
}
|
|
|
|
for (; iVar3 != 0; iVar3 = iVar3 + -1) {
|
|
|
|
*puVar1 = *puVar4;
|
|
|
|
puVar4 = puVar4 + 1;
|
|
|
|
puVar1 = puVar1 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x24) = *puVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 0x24);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 0x28);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x28) = *puVar1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006773d0 at 0x006773D0 (size: 40) ---
|
|
|
|
|
|
void __fastcall FUN_006773d0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 2;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007fee50;
|
|
|
|
param_1[3] = DAT_008f86e4;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677400 at 0x00677400 (size: 55) ---
|
|
|
|
|
|
void __fastcall FUN_00677400(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 3;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007feea0;
|
|
|
|
param_1[3] = DAT_008f86e4;
|
|
|
|
param_1[4] = DAT_008f86e4;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677670 at 0x00677670 (size: 102) ---
|
|
|
|
|
|
void __thiscall FUN_00677670(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
|
|
|
|
FUN_00677310(param_2);
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x2c) = *puVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 0x2c);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (undefined4 *)FUN_0040acf0(4);
|
|
|
|
if (puVar1 != (undefined4 *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
*puVar1 = *(undefined4 *)(param_1 + 0x30);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x30) = *puVar1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006777c0 at 0x006777C0 (size: 49) ---
|
|
|
|
|
|
void __fastcall FUN_006777c0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 7;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007feef0;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = DAT_008f86e4;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 8) = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677920 at 0x00677920 (size: 40) ---
|
|
|
|
|
|
void __fastcall FUN_00677920(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
param_1[1] = 8;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_LAB_007fef40;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = DAT_008f86e4;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677a10 at 0x00677A10 (size: 63) ---
|
|
|
|
|
|
void __fastcall FUN_00677a10(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
param_1[1] = 1;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
*param_1 = &PTR_FUN_007fef90;
|
|
|
|
uVar1 = DAT_008f86e4;
|
|
|
|
param_1[3] = param_1[3] & 0xffff0000;
|
|
|
|
*(undefined2 *)((int)param_1 + 0xe) = 0;
|
|
|
|
param_1[4] = uVar1;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677a50 at 0x00677A50 (size: 82) ---
|
|
|
|
|
|
void __fastcall FUN_00677a50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
param_1[1] = 1;
|
|
|
|
*param_1 = &PTR_FUN_007fef90;
|
|
|
|
param_1[2] = 0x4c50;
|
|
|
|
uVar1 = DAT_008f86e4;
|
|
|
|
param_1[3] = param_1[3] & 0xffff0000;
|
|
|
|
*(undefined2 *)((int)param_1 + 0xe) = 0;
|
|
|
|
param_1[4] = uVar1;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
param_1[7] = 0;
|
|
|
|
param_1[8] = 0;
|
|
|
|
param_1[9] = 0;
|
|
|
|
param_1[10] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007fefe0;
|
|
|
|
param_1[0xb] = 0;
|
|
|
|
param_1[0xc] = 0;
|
|
|
|
param_1[1] = 5;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677ab0 at 0x00677AB0 (size: 263) ---
|
|
|
|
|
|
undefined4 * FUN_00677ab0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
switch(param_1) {
|
|
|
|
case 0:
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = &PTR_FUN_007fed10;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0x4c50;
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
iVar1 = FUN_005df0f5(0x2c);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677a10();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
iVar1 = FUN_005df0f5(0x18);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_006773d0();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
iVar1 = FUN_005df0f5(0x24);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677400();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
iVar1 = FUN_005df0f5(0x20);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677240();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
iVar1 = FUN_005df0f5(0x34);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677a50();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
iVar1 = FUN_005df0f5(0x1c);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677270();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
iVar1 = FUN_005df0f5(0x24);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_006777c0();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
iVar1 = FUN_005df0f5(0x18);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00677920();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
iVar1 = FUN_005df0f5(0x18);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_006772a0();
|
|
|
|
return puVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677be0 at 0x00677BE0 (size: 9) ---
|
|
|
|
|
|
void __fastcall FUN_00677be0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0xffffffff;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677bf0 at 0x00677BF0 (size: 113) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00677bf0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = *param_2;
|
|
|
|
param_1[1] = param_2[1];
|
|
|
|
param_1[2] = param_2[2];
|
|
|
|
param_1[3] = param_2[3];
|
|
|
|
param_1[4] = param_2[4];
|
|
|
|
param_1[5] = param_2[5];
|
|
|
|
param_1[6] = param_2[6];
|
|
|
|
param_1[7] = param_2[7];
|
|
|
|
param_1[8] = param_2[8];
|
|
|
|
param_1[9] = param_2[9];
|
|
|
|
param_1[10] = param_2[10];
|
|
|
|
*(undefined1 *)(param_1 + 0xb) = *(undefined1 *)(param_2 + 0xb);
|
|
|
|
param_1[0xc] = param_2[0xc];
|
|
|
|
param_1[0xd] = param_2[0xd];
|
|
|
|
param_1[0xe] = param_2[0xe];
|
|
|
|
FUN_004139a0(param_2 + 0xf);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677c70 at 0x00677C70 (size: 43) ---
|
|
|
|
|
|
undefined4 __fastcall FUN_00677c70(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
BOOL BVar1;
|
|
|
|
|
|
|
|
if ((HANDLE)*param_1 != (HANDLE)0xffffffff) {
|
|
|
|
BVar1 = CloseHandle((HANDLE)*param_1);
|
|
|
|
if (BVar1 != 0) {
|
|
|
|
*param_1 = 0xffffffff;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0xffffff98;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677ca0 at 0x00677CA0 (size: 29) ---
|
|
|
|
|
|
void __fastcall FUN_00677ca0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
BOOL BVar1;
|
|
|
|
|
|
|
|
if ((HANDLE)*param_1 != (HANDLE)0xffffffff) {
|
|
|
|
BVar1 = CloseHandle((HANDLE)*param_1);
|
|
|
|
if (BVar1 != 0) {
|
|
|
|
*param_1 = 0xffffffff;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677cc0 at 0x00677CC0 (size: 90) ---
|
|
|
|
|
|
uint __thiscall FUN_00677cc0(undefined4 *param_1,LPVOID param_2,DWORD param_3,DWORD param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
DWORD DVar1;
|
|
|
|
|
|
|
|
DVar1 = SetFilePointer((HANDLE)*param_1,param_4,(PLONG)0x0,0);
|
|
|
|
if (DVar1 == 0xffffffff) {
|
|
|
|
return 0xffffff97;
|
|
|
|
}
|
|
|
|
param_4 = 0;
|
|
|
|
ReadFile((HANDLE)*param_1,param_2,param_3,¶m_4,(LPOVERLAPPED)0x0);
|
|
|
|
return (param_4 == param_3) - 1 & 0xffffff9a;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677d20 at 0x00677D20 (size: 92) ---
|
|
|
|
|
|
uint __thiscall FUN_00677d20(undefined4 *param_1,LPCVOID param_2,DWORD param_3,DWORD param_4)
|
|
|
|
|
|
|
|
{
|
|
|
|
DWORD DVar1;
|
|
|
|
BOOL BVar2;
|
|
|
|
|
|
|
|
DVar1 = SetFilePointer((HANDLE)*param_1,param_4,(PLONG)0x0,0);
|
|
|
|
if (DVar1 == 0xffffffff) {
|
|
|
|
return 0xffffff97;
|
|
|
|
}
|
|
|
|
BVar2 = WriteFile((HANDLE)*param_1,param_2,param_3,¶m_4,(LPOVERLAPPED)0x0);
|
|
|
|
if (BVar2 == 0) {
|
|
|
|
GetLastError();
|
|
|
|
}
|
|
|
|
return (param_4 == param_3) - 1 & 0xffffff99;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677d80 at 0x00677D80 (size: 381) ---
|
|
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00677e54) */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00677e5f) */
|
|
|
|
|
|
|
|
undefined4 __thiscall
|
|
|
|
FUN_00677d80(int *param_1,undefined4 param_2,int *param_3,undefined4 param_4,uint param_5)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
int iVar2;
|
|
|
|
char *pcVar3;
|
|
|
|
char *pcVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
int iVar6;
|
|
|
|
int local_194;
|
|
|
|
char local_190 [255];
|
|
|
|
undefined1 local_91;
|
|
|
|
undefined1 auStack_6c [92];
|
|
|
|
int iStack_10;
|
|
|
|
|
|
|
|
FUN_006713e0();
|
|
|
|
pcVar3 = local_190;
|
|
|
|
for (iVar2 = 0x40; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
pcVar3[0] = '\0';
|
|
|
|
pcVar3[1] = '\0';
|
|
|
|
pcVar3[2] = '\0';
|
|
|
|
pcVar3[3] = '\0';
|
|
|
|
pcVar3 = pcVar3 + 4;
|
|
|
|
}
|
|
|
|
local_194 = *param_3;
|
|
|
|
pcVar3 = "\nFile Header Structure Default Constructor v1.3\n";
|
|
|
|
pcVar4 = local_190;
|
|
|
|
for (iVar2 = 0xc; iVar2 != 0; iVar2 = iVar2 + -1) {
|
|
|
|
*(undefined4 *)pcVar4 = *(undefined4 *)pcVar3;
|
|
|
|
pcVar3 = pcVar3 + 4;
|
|
|
|
pcVar4 = pcVar4 + 4;
|
|
|
|
}
|
|
|
|
*pcVar4 = *pcVar3;
|
|
|
|
local_91 = 0x1a;
|
|
|
|
InterlockedIncrement((LONG *)(local_194 + -0x10));
|
|
|
|
FUN_0040cc80(&local_194);
|
|
|
|
iVar2 = -0x40000000;
|
|
|
|
if ((param_5 & 4) != 0) {
|
|
|
|
iVar2 = -0x80000000;
|
|
|
|
}
|
|
|
|
iVar6 = 0;
|
|
|
|
iVar2 = (*(code *)PTR_FUN_00837374)(local_194,iVar2,iVar2 < 0,0);
|
|
|
|
*param_1 = iVar2;
|
|
|
|
if (iVar2 == -1) {
|
|
|
|
uVar5 = 0xfffffffe;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar5 = 0;
|
|
|
|
if (iStack_10 != 0) {
|
|
|
|
uVar5 = FUN_00677cc0(&stack0xfffffe54,400,0);
|
|
|
|
FUN_00677bf0(auStack_6c);
|
|
|
|
SetFilePointer((HANDLE)*param_1,0,(PLONG)0x0,2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(iVar6 + -0x10));
|
|
|
|
if ((LVar1 == 0) && ((undefined4 *)(iVar6 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar6 + -0x14))(1);
|
|
|
|
}
|
|
|
|
FUN_00695670();
|
|
|
|
return uVar5;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677f00 at 0x00677F00 (size: 61) ---
|
|
|
|
|
|
bool __thiscall FUN_00677f00(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
piVar1 = (int *)*param_1;
|
|
|
|
uVar2 = FUN_004220b0(param_2,0x24);
|
|
|
|
iVar3 = FUN_00415430(uVar2);
|
|
|
|
*param_1 = iVar3;
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
(**(code **)(*piVar1 + 0x14))();
|
|
|
|
}
|
|
|
|
return *param_1 != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00677f40 at 0x00677F40 (size: 336) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_00677f40(int *param_1,undefined *param_2,uint *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
char cVar2;
|
|
|
|
int iVar3;
|
|
|
|
uint uVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
undefined4 extraout_ECX;
|
|
|
|
undefined4 extraout_ECX_00;
|
|
|
|
undefined1 uVar6;
|
|
|
|
undefined *puVar7;
|
|
|
|
undefined4 uVar8;
|
|
|
|
int *piVar9;
|
|
|
|
int local_10 [4];
|
|
|
|
|
|
|
|
puVar1 = param_2;
|
|
|
|
if (param_2 == (undefined *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar6 = 1;
|
|
|
|
if (*param_1 == 0) {
|
|
|
|
FUN_00401340("This Enumerated must be initializedprior to reading a filenode.");
|
|
|
|
FUN_0065d620(puVar1,param_1);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*param_3 = 0;
|
|
|
|
FUN_0065cf90(param_2);
|
|
|
|
iVar3 = FUN_0065c810();
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
param_2 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar2 = FUN_00426020(¶m_2);
|
|
|
|
puVar1 = param_2;
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
uVar8 = extraout_ECX;
|
|
|
|
FUN_00401340("expecting a string node");
|
|
|
|
FUN_0065d620(iVar3,uVar8);
|
|
|
|
uVar6 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar9 = local_10;
|
|
|
|
puVar7 = param_2;
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + -0x10));
|
|
|
|
cVar2 = FUN_0041b7e0(puVar7,piVar9);
|
|
|
|
if (cVar2 == '\0') {
|
|
|
|
uVar8 = extraout_ECX_00;
|
|
|
|
puVar7 = puVar1;
|
|
|
|
FUN_00401340("invalid emp value \'%s\'");
|
|
|
|
FUN_0065d620(iVar3,uVar8,puVar7);
|
|
|
|
uVar6 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar4 = 0;
|
|
|
|
if (local_10[0] != 0) {
|
|
|
|
uVar4 = 1 << ((char)local_10[0] - 1U & 0x1f);
|
|
|
|
}
|
|
|
|
*param_3 = *param_3 | uVar4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar3 = FUN_0065cb10();
|
|
|
|
}
|
|
|
|
FUN_0065cae0();
|
|
|
|
return uVar6;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678090 at 0x00678090 (size: 352) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_00678090(int *param_1,int param_2,uint *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
char cVar3;
|
|
|
|
int iVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
undefined4 extraout_ECX;
|
|
|
|
undefined4 extraout_ECX_00;
|
|
|
|
undefined8 uVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
undefined4 uVar8;
|
|
|
|
int *piVar9;
|
|
|
|
int local_10 [4];
|
|
|
|
|
|
|
|
puVar1 = param_3;
|
|
|
|
iVar4 = param_2;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
param_2._0_1_ = 1;
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
*param_3 = 0;
|
|
|
|
param_3[1] = 0;
|
|
|
|
FUN_0065cf90(iVar4);
|
|
|
|
iVar4 = FUN_0065c810();
|
|
|
|
while (iVar4 != 0) {
|
|
|
|
param_3 = (uint *)PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)((int)PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar3 = FUN_00426020(¶m_3);
|
|
|
|
puVar2 = param_3;
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
uVar8 = extraout_ECX;
|
|
|
|
FUN_00401340("expecting a string node");
|
|
|
|
FUN_0065d620(iVar4,uVar8);
|
|
|
|
param_2._0_1_ = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar9 = local_10;
|
|
|
|
puVar7 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(param_3 + -4));
|
|
|
|
cVar3 = FUN_0041b7e0(puVar7,piVar9);
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
uVar8 = extraout_ECX_00;
|
|
|
|
puVar7 = puVar2;
|
|
|
|
FUN_00401340("invalid emp value \'%s\'");
|
|
|
|
FUN_0065d620(iVar4,uVar8,puVar7);
|
|
|
|
param_2._0_1_ = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (local_10[0] == 0) {
|
|
|
|
uVar6 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar6 = __allshl();
|
|
|
|
}
|
|
|
|
*puVar1 = *puVar1 | (uint)uVar6;
|
|
|
|
puVar1[1] = puVar1[1] | (uint)((ulonglong)uVar6 >> 0x20);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(puVar2 + -4));
|
|
|
|
if ((LVar5 == 0) && (puVar2 + -5 != (uint *)0x0)) {
|
|
|
|
(**(code **)puVar2[-5])(1);
|
|
|
|
}
|
|
|
|
iVar4 = FUN_0065cb10();
|
|
|
|
}
|
|
|
|
FUN_0065cae0();
|
|
|
|
return (undefined1)param_2;
|
|
|
|
}
|
|
|
|
FUN_00401340("This Enumerated must be initializedprior to reading a filenode.");
|
|
|
|
FUN_0065d620(iVar4,param_1);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006781f0 at 0x006781F0 (size: 168) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_006781f0(int *param_1,undefined *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined1 local_1;
|
|
|
|
|
|
|
|
FUN_00408910(0,1);
|
|
|
|
if (*param_1 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
local_1 = 1;
|
|
|
|
iVar5 = 1;
|
|
|
|
for (uVar3 = (uint)param_2; uVar3 != 0; uVar3 = uVar3 >> 1) {
|
|
|
|
if ((uVar3 & 1) != 0) {
|
|
|
|
param_2 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar1 = FUN_0041af60(iVar5,¶m_2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
local_1 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040c440(¶m_2);
|
|
|
|
}
|
|
|
|
puVar4 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar5 = iVar5 + 1;
|
|
|
|
}
|
|
|
|
return local_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006782a0 at 0x006782A0 (size: 278) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_006782a0(int *param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
int iVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
int *piVar6;
|
|
|
|
int *local_c;
|
|
|
|
uint local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
if ((param_3 != 0) && (*param_1 != 0)) {
|
|
|
|
local_c = (int *)0x0;
|
|
|
|
local_8 = 0;
|
|
|
|
local_4 = 0;
|
|
|
|
cVar3 = FUN_006781f0(param_2,&local_c);
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
piVar1 = local_c + local_4;
|
|
|
|
piVar6 = local_c;
|
|
|
|
while( true ) {
|
|
|
|
if (piVar6 == piVar1) {
|
|
|
|
if (((local_8 & 0x80000000) == 0x80000000) && (local_c != (int *)0x0)) {
|
|
|
|
FUN_00407920(3);
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
iVar2 = *piVar6;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
iVar4 = iVar2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar2 + -0x10));
|
|
|
|
iVar4 = FUN_00426fe0(iVar4);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(iVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
if (iVar4 == 0) break;
|
|
|
|
piVar6 = piVar6 + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (((local_8 & 0x80000000) == 0x80000000) && (local_c != (int *)0x0)) {
|
|
|
|
FUN_00407920(3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006783c0 at 0x006783C0 (size: 200) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_006783c0(int *param_1,undefined *param_2,uint param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
uint uVar6;
|
|
|
|
undefined1 local_5;
|
|
|
|
|
|
|
|
FUN_00408910(0,1);
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
local_5 = 1;
|
|
|
|
iVar4 = 1;
|
|
|
|
uVar3 = param_3;
|
|
|
|
uVar6 = (uint)param_2;
|
|
|
|
if (param_2 != (undefined *)0x0 || param_3 != 0) {
|
|
|
|
do {
|
|
|
|
if ((uVar6 & 1) != 0) {
|
|
|
|
param_2 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
cVar1 = FUN_0041af60(iVar4,¶m_2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
local_5 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_0040c440(¶m_2);
|
|
|
|
}
|
|
|
|
puVar5 = (undefined4 *)(param_2 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar6 = uVar6 >> 1 | uVar3 << 0x1f;
|
|
|
|
uVar3 = uVar3 >> 1;
|
|
|
|
iVar4 = iVar4 + 1;
|
|
|
|
} while (uVar6 != 0 || uVar3 != 0);
|
|
|
|
}
|
|
|
|
return local_5;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006785b0 at 0x006785B0 (size: 48) ---
|
|
|
|
|
|
void __thiscall FUN_006785b0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_2 + 0xc);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006785da. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x5c))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (iVar1 != 1) {
|
|
|
|
if (iVar1 == 2) {
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006785c8. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 0x60))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006785d1. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
(**(code **)(*param_1 + 100))();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006785e0 at 0x006785E0 (size: 36) ---
|
|
|
|
|
|
bool __thiscall FUN_006785e0(int *param_1,char param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
|
|
|
|
(**(code **)(*param_1 + 0x54))();
|
|
|
|
cVar1 = FUN_00414620(param_2 == '\0',0);
|
|
|
|
return cVar1 == '\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678730 at 0x00678730 (size: 332) ---
|
|
|
|
|
|
void __thiscall FUN_00678730(int *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined4 *puVar3;
|
|
|
|
bool bVar4;
|
|
|
|
|
|
|
|
if (param_1[2] == param_1[1] + -1) {
|
|
|
|
iVar2 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = param_1[2] + 1;
|
|
|
|
}
|
|
|
|
if (iVar2 != param_1[3]) {
|
|
|
|
bVar4 = true;
|
|
|
|
do {
|
|
|
|
if (param_1[5] == 0) {
|
|
|
|
if (bVar4) {
|
|
|
|
*(undefined4 *)(*param_1 + param_1[2] * 4) = param_2;
|
|
|
|
if (param_1[2] == param_1[1] + -1) {
|
|
|
|
param_1[2] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1[2] = param_1[2] + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
(**(code **)(param_1[9] + 4))();
|
|
|
|
puVar3 = (undefined4 *)param_1[5];
|
|
|
|
if (puVar3 == (undefined4 *)0x0) {
|
|
|
|
FUN_0065e910();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = puVar3[1];
|
|
|
|
param_1[5] = iVar2;
|
|
|
|
if (iVar2 == 0) {
|
|
|
|
param_1[6] = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 *)(iVar2 + 8) = 0;
|
|
|
|
}
|
|
|
|
uVar1 = *puVar3;
|
|
|
|
operator_delete(puVar3);
|
|
|
|
param_1[7] = param_1[7] + -1;
|
|
|
|
param_1[8] = param_1[8] + -1;
|
|
|
|
*(undefined4 *)(*param_1 + param_1[2] * 4) = uVar1;
|
|
|
|
if (param_1[2] == param_1[1] + -1) {
|
|
|
|
iVar2 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = param_1[2] + 1;
|
|
|
|
}
|
|
|
|
param_1[2] = iVar2;
|
|
|
|
FUN_0065e910();
|
|
|
|
if (param_1[2] == param_1[1] + -1) {
|
|
|
|
bVar4 = param_1[3] != 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
bVar4 = param_1[2] + 1 != param_1[3];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (bVar4);
|
|
|
|
}
|
|
|
|
(**(code **)(param_1[9] + 4))();
|
|
|
|
puVar3 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar3 != (undefined4 *)0x0) {
|
|
|
|
*puVar3 = param_2;
|
|
|
|
puVar3[1] = 0;
|
|
|
|
puVar3[2] = 0;
|
|
|
|
if (param_1[5] == 0) {
|
|
|
|
param_1[5] = (int)puVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar2 = param_1[6];
|
|
|
|
*(undefined4 **)(iVar2 + 4) = puVar3;
|
|
|
|
puVar3[2] = iVar2;
|
|
|
|
}
|
|
|
|
param_1[6] = (int)puVar3;
|
|
|
|
param_1[7] = param_1[7] + 1;
|
|
|
|
}
|
|
|
|
param_1[8] = param_1[8] + 1;
|
|
|
|
FUN_0065e910();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678890 at 0x00678890 (size: 200) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00678890(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
|
|
|
|
if (param_1[2] != param_1[3]) {
|
|
|
|
*param_2 = *(undefined4 *)(*param_1 + param_1[3] * 4);
|
|
|
|
if (param_1[3] == param_1[1] + -1) {
|
|
|
|
param_1[3] = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
param_1[3] = param_1[3] + 1;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (param_1[5] == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
(**(code **)(param_1[9] + 4))();
|
|
|
|
if (param_1[2] == param_1[3]) {
|
|
|
|
cVar1 = FUN_0043c800(param_2);
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
param_1[8] = param_1[8] + -1;
|
|
|
|
FUN_0065e910();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_2 = *(undefined4 *)(*param_1 + param_1[3] * 4);
|
|
|
|
if (param_1[3] == param_1[1] + -1) {
|
|
|
|
param_1[3] = 0;
|
|
|
|
FUN_0065e910();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
param_1[3] = param_1[3] + 1;
|
|
|
|
FUN_0065e910();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006789e0 at 0x006789E0 (size: 46) ---
|
|
|
|
|
|
void FUN_006789e0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
InterlockedIncrement((LONG *)(param_1 + 4));
|
|
|
|
FUN_00678730(param_1);
|
|
|
|
FUN_0065eb20();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678a10 at 0x00678A10 (size: 122) ---
|
|
|
|
|
|
void __fastcall FUN_00678a10(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
char cVar2;
|
|
|
|
DWORD DVar3;
|
|
|
|
DWORD DVar4;
|
|
|
|
uint uVar5;
|
|
|
|
LONG LVar6;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
local_4 = param_1;
|
|
|
|
DVar3 = GetTickCount();
|
|
|
|
local_4 = (int *)0x0;
|
|
|
|
DVar4 = GetTickCount();
|
|
|
|
uVar5 = DVar4 - DVar3;
|
|
|
|
while ((uVar5 < 0x19 && (cVar2 = FUN_00678890(&local_4), piVar1 = local_4, cVar2 != '\0'))) {
|
|
|
|
(**(code **)(*param_1 + 0x5c))(local_4);
|
|
|
|
if (piVar1 != (int *)0x0) {
|
|
|
|
LVar6 = InterlockedDecrement(piVar1 + 1);
|
|
|
|
if (LVar6 == 0) {
|
|
|
|
(**(code **)*piVar1)(1);
|
|
|
|
}
|
|
|
|
local_4 = (int *)0x0;
|
|
|
|
}
|
|
|
|
DVar4 = GetTickCount();
|
|
|
|
uVar5 = DVar4 - DVar3;
|
|
|
|
}
|
|
|
|
FUN_00414390();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678a90 at 0x00678A90 (size: 189) ---
|
|
|
|
|
|
void __thiscall FUN_00678a90(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
piVar1 = (int *)(param_1 + 4);
|
|
|
|
iVar2 = param_2 + 0x10;
|
|
|
|
iVar4 = (**(code **)(*(int *)(param_1 + 4) + 0x84))(iVar2,*(undefined4 *)(param_2 + 0x5c));
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
*(uint *)(param_2 + 0x60) = *(uint *)(param_2 + 0x60) | 4;
|
|
|
|
FUN_00417660(iVar4);
|
|
|
|
*(undefined4 *)(param_2 + 8) = 1;
|
|
|
|
(**(code **)(*piVar1 + 0x60))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*(uint *)(param_2 + 0x60) = *(uint *)(param_2 + 0x60) & 0xfffffffb;
|
|
|
|
cVar3 = (**(code **)(**(int **)(param_2 + 0x5c) + 0x20))();
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
cVar3 = (**(code **)(*piVar1 + 0x3c))(iVar2);
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
FUN_006789e0(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar3 = (**(code **)(**(int **)(param_2 + 0x5c) + 0x24))();
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
cVar3 = (**(code **)(*piVar1 + 0x8c))(iVar2,*(undefined4 *)(param_2 + 0x5c));
|
|
|
|
if (cVar3 != '\0') {
|
|
|
|
*(uint *)(param_2 + 0x60) = *(uint *)(param_2 + 0x60) & 0xfffffffd;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_2 + 8) = 3;
|
|
|
|
(**(code **)(*piVar1 + 0x5c))(param_2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678b50 at 0x00678B50 (size: 253) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00678b50(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
FUN_00415320();
|
|
|
|
FUN_0065ea90(0);
|
|
|
|
param_1[0x4c] = &PTR_LAB_007ff1d8;
|
|
|
|
*param_1 = &PTR_LAB_007ff170;
|
|
|
|
param_1[1] = &PTR_FUN_007ff0c8;
|
|
|
|
param_1[0x52] = 0;
|
|
|
|
param_1[0x53] = 0;
|
|
|
|
param_1[0x50] = 0;
|
|
|
|
param_1[0x51] = 0x400;
|
|
|
|
param_1[0x54] = &PTR_FUN_007c6918;
|
|
|
|
param_1[0x55] = 0;
|
|
|
|
param_1[0x56] = 0;
|
|
|
|
param_1[0x57] = 0;
|
|
|
|
param_1[0x58] = 0;
|
|
|
|
FUN_0065e8b0();
|
|
|
|
uVar1 = thunk_FUN_005df0f5(param_1[0x51] << 2);
|
|
|
|
param_1[0x50] = uVar1;
|
|
|
|
param_1[100] = 0;
|
|
|
|
param_1[0x62] = 0;
|
|
|
|
param_1[99] = 0x400;
|
|
|
|
param_1[0x65] = 0;
|
|
|
|
param_1[0x66] = &PTR_FUN_007c6918;
|
|
|
|
param_1[0x67] = 0;
|
|
|
|
param_1[0x68] = 0;
|
|
|
|
param_1[0x69] = 0;
|
|
|
|
param_1[0x6a] = 0;
|
|
|
|
FUN_0065e8b0();
|
|
|
|
uVar1 = thunk_FUN_005df0f5(param_1[99] << 2);
|
|
|
|
param_1[0x62] = uVar1;
|
|
|
|
FUN_0065eae0();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678cb0 at 0x00678CB0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_00678cb0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_004fa5c0();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678d30 at 0x00678D30 (size: 21) ---
|
|
|
|
|
|
undefined4 * __fastcall FUN_00678d30(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_LAB_007ff1ec;
|
|
|
|
FUN_00670fc0();
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678d50 at 0x00678D50 (size: 178) ---
|
|
|
|
|
|
void __fastcall FUN_00678d50(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
void *local_14;
|
|
|
|
uint local_10;
|
|
|
|
undefined1 local_8;
|
|
|
|
|
|
|
|
param_1[2] = 0;
|
|
|
|
if ((param_1[1] & 0x80000000U) != 0x80000000) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
uVar1 = param_1[1] & 0x7fffffff;
|
|
|
|
if (-1 < (int)(uVar1 - 1)) {
|
|
|
|
iVar3 = (uVar1 - 1) * 0x28;
|
|
|
|
do {
|
|
|
|
FUN_00670fc0();
|
|
|
|
iVar2 = *param_1 + iVar3;
|
|
|
|
*(undefined4 *)(iVar2 + 8) = local_20;
|
|
|
|
*(undefined4 *)(iVar2 + 0xc) = local_1c;
|
|
|
|
FUN_005c0220(&local_14);
|
|
|
|
*(undefined1 *)(iVar2 + 0x20) = local_8;
|
|
|
|
if ((local_10 & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(local_14);
|
|
|
|
}
|
|
|
|
iVar3 = iVar3 + -0x28;
|
|
|
|
uVar1 = uVar1 - 1;
|
|
|
|
} while (uVar1 != 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
FUN_004f9060(3);
|
|
|
|
}
|
|
|
|
*param_1 = 0;
|
|
|
|
param_1[1] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678e10 at 0x00678E10 (size: 269) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00678e10(int *param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
int local_8;
|
|
|
|
|
|
|
|
if ((uint)param_1[2] <= param_2) {
|
|
|
|
if (param_2 <= (param_1[1] & 0x7fffffffU)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (param_2 == 0) {
|
|
|
|
FUN_00678d50();
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
puVar3 = (uint *)thunk_FUN_005df0f5(param_2 * 0x28 + 4);
|
|
|
|
if (puVar3 != (uint *)0x0) {
|
|
|
|
puVar1 = puVar3 + 1;
|
|
|
|
*puVar3 = param_2;
|
|
|
|
FUN_00401000(puVar1,0x28,param_2,FUN_00678d30);
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
if (*param_1 != 0) {
|
|
|
|
local_8 = param_1[2];
|
|
|
|
if (-1 < local_8 + -1) {
|
|
|
|
puVar3 = puVar3 + (local_8 + -1) * 10 + 9;
|
|
|
|
do {
|
|
|
|
iVar2 = *param_1 + -(int)puVar1 + -0x20;
|
|
|
|
puVar3[-6] = *(uint *)((int)puVar3 + *param_1 + -(int)puVar1 + -0x18);
|
|
|
|
puVar3[-5] = *(uint *)((int)puVar3 + iVar2 + 0xc);
|
|
|
|
FUN_005c0220((undefined1 *)((int)puVar3 + iVar2 + 0x14));
|
|
|
|
*(undefined1 *)puVar3 = *(undefined1 *)((int)puVar3 + iVar2 + 0x20);
|
|
|
|
puVar3 = puVar3 + -10;
|
|
|
|
local_8 = local_8 + -1;
|
|
|
|
} while (local_8 != 0);
|
|
|
|
}
|
|
|
|
if (((param_1[1] & 0x80000000U) == 0x80000000) && (*param_1 != 0)) {
|
|
|
|
FUN_004f9060(3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*param_1 = (int)puVar1;
|
|
|
|
param_1[1] = param_2 | 0x80000000;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678f20 at 0x00678F20 (size: 198) ---
|
|
|
|
|
|
undefined1 __thiscall FUN_00678f20(int *param_1,uint param_2,char param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
int iVar3;
|
|
|
|
int iVar4;
|
|
|
|
undefined4 local_20;
|
|
|
|
undefined4 local_1c;
|
|
|
|
void *local_14;
|
|
|
|
uint local_10;
|
|
|
|
undefined1 local_8;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) < param_2) {
|
|
|
|
uVar2 = param_2;
|
|
|
|
if (param_3 == '\0') {
|
|
|
|
uVar2 = FUN_00453850(param_2);
|
|
|
|
}
|
|
|
|
cVar1 = FUN_00678e10(uVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (param_2 < (uint)param_1[2]) {
|
|
|
|
iVar3 = param_2 * 0x28;
|
|
|
|
uVar2 = param_2;
|
|
|
|
do {
|
|
|
|
FUN_00670fc0();
|
|
|
|
iVar4 = *param_1 + iVar3;
|
|
|
|
*(undefined4 *)(iVar4 + 8) = local_20;
|
|
|
|
*(undefined4 *)(iVar4 + 0xc) = local_1c;
|
|
|
|
FUN_005c0220(&local_14);
|
|
|
|
*(undefined1 *)(iVar4 + 0x20) = local_8;
|
|
|
|
if ((local_10 & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(local_14);
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
iVar3 = iVar3 + 0x28;
|
|
|
|
} while (uVar2 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
param_1[2] = param_2;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00678ff0 at 0x00678FF0 (size: 140) ---
|
|
|
|
|
|
void __thiscall FUN_00678ff0(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint uVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
uVar3 = param_1[2];
|
|
|
|
FUN_0040ad10(4);
|
|
|
|
puVar1 = (uint *)FUN_0040acf0(4);
|
|
|
|
iVar4 = 0;
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
if ((*(byte *)(param_2 + 4) & 1) == 0) {
|
|
|
|
uVar3 = *puVar1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar1 = uVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((~*(byte *)(param_2 + 4) & 1) != 0) {
|
|
|
|
uVar2 = FUN_0040a8f0();
|
|
|
|
if (uVar2 < uVar3) {
|
|
|
|
FUN_0040aa50();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
param_1[2] = 0;
|
|
|
|
FUN_00678f20(uVar3,1);
|
|
|
|
}
|
|
|
|
uVar3 = 0;
|
|
|
|
if (param_1[2] != 0) {
|
|
|
|
do {
|
|
|
|
(*(code *)**(undefined4 **)(*param_1 + iVar4))(param_2);
|
|
|
|
uVar3 = uVar3 + 1;
|
|
|
|
iVar4 = iVar4 + 0x28;
|
|
|
|
} while (uVar3 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679080 at 0x00679080 (size: 105) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_00679080(int *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 uVar2;
|
|
|
|
|
|
|
|
if ((param_1[1] & 0x7fffffffU) <= (uint)param_1[2]) {
|
|
|
|
uVar2 = FUN_00453850((param_1[1] & 0x7fffffffU) + 1);
|
|
|
|
uVar2 = FUN_00678e10(uVar2);
|
|
|
|
if ((char)uVar2 == '\0') {
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar1 = *param_1 + param_1[2] * 0x28;
|
|
|
|
*(undefined4 *)(iVar1 + 8) = *(undefined4 *)(param_2 + 8);
|
|
|
|
*(undefined4 *)(iVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
|
|
|
|
FUN_005c0220(param_2 + 0x14);
|
|
|
|
*(undefined1 *)(iVar1 + 0x20) = *(undefined1 *)(param_2 + 0x20);
|
|
|
|
iVar1 = param_1[2];
|
|
|
|
param_1[2] = iVar1 + 1;
|
|
|
|
return CONCAT31((int3)((uint)(iVar1 + 1) >> 8),1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679100 at 0x00679100 (size: 112) ---
|
|
|
|
|
|
int __thiscall FUN_00679100(int param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
undefined **local_28 [5];
|
|
|
|
void *local_14;
|
|
|
|
uint local_10;
|
|
|
|
|
|
|
|
local_28[0] = &PTR_LAB_007ff1ec;
|
|
|
|
FUN_00670fc0();
|
|
|
|
FUN_00679080(local_28);
|
|
|
|
if ((local_10 & 0x80000000) == 0x80000000) {
|
|
|
|
operator_delete__(local_14);
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 4);
|
|
|
|
iVar2 = (*(int *)(param_1 + 0xc) + -1) * 0x28;
|
|
|
|
*(undefined4 *)(iVar2 + 8 + iVar1) = param_2;
|
|
|
|
*(undefined4 *)(iVar2 + 0xc + iVar1) = param_3;
|
|
|
|
return iVar2 + 0x10 + *(int *)(param_1 + 4);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679170 at 0x00679170 (size: 83) ---
|
|
|
|
|
|
int __thiscall FUN_00679170(int *param_1,undefined1 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
iVar1 = (**(code **)(*param_1 + 4))();
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*(undefined4 **)(iVar1 + 8) != (undefined4 *)0x0) {
|
|
|
|
(**(code **)**(undefined4 **)(iVar1 + 8))(1);
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar1 + 8) = 0;
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(8);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = &PTR_FUN_00797010;
|
|
|
|
*(undefined1 *)(puVar2 + 1) = param_2;
|
|
|
|
*(undefined4 **)(iVar1 + 8) = puVar2;
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
*(undefined4 *)(iVar1 + 8) = 0;
|
|
|
|
return iVar1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006791d0 at 0x006791D0 (size: 23) ---
|
|
|
|
|
|
void __fastcall FUN_006791d0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = 0xc0400000;
|
|
|
|
param_1[1] = 0xc0400000;
|
|
|
|
param_1[2] = 0xc0400000;
|
|
|
|
param_1[3] = 0xc0400000;
|
|
|
|
*(undefined1 *)(param_1 + 4) = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006791f0 at 0x006791F0 (size: 46) ---
|
|
|
|
|
|
void FUN_006791f0(undefined4 *param_1,int *param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((*(int *)(*param_2 + -4) != 1) && (param_3 == 0)) {
|
|
|
|
*param_1 = DAT_008f8700;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
*param_1 = DAT_008f8700;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679220 at 0x00679220 (size: 28) ---
|
|
|
|
|
|
undefined4 * FUN_00679220(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *lpAddend;
|
|
|
|
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_008183b4 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_008183b4;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679240 at 0x00679240 (size: 77) ---
|
|
|
|
|
|
undefined4 * FUN_00679240(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
if (param_2 == DAT_008f8700) {
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_008183b4 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_008183b4;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
FUN_0041c280(param_2);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_008183b4 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_008183b4;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679290 at 0x00679290 (size: 69) ---
|
|
|
|
|
|
undefined4 * FUN_00679290(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG *pLVar2;
|
|
|
|
|
|
|
|
iVar1 = FUN_0041c260(param_2);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
pLVar2 = (LONG *)(PTR_DAT_008183b4 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_008183b4;
|
|
|
|
InterlockedIncrement(pLVar2);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
pLVar2 = (LONG *)(PTR_DAT_008183b4 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_008183b4;
|
|
|
|
InterlockedIncrement(pLVar2);
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006792e0 at 0x006792E0 (size: 54) ---
|
|
|
|
|
|
void FUN_006792e0(uint *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined8 uVar2;
|
|
|
|
|
|
|
|
uVar2 = __allmul(param_1[1],0,0,1);
|
|
|
|
uVar1 = (uint)uVar2 + *param_1;
|
|
|
|
__aulldiv(uVar1 + 0x2ac18000,
|
|
|
|
(int)((ulonglong)uVar2 >> 0x20) + (uint)CARRY4((uint)uVar2,*param_1) + -0x19db1df +
|
|
|
|
(uint)(0xd53e7fff < uVar1),10000000,0);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679340 at 0x00679340 (size: 84) ---
|
|
|
|
|
|
uint __thiscall FUN_00679340(int *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
uint *unaff_retaddr;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = 0;
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x58))(param_2,param_3,&local_4);
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x60))(param_3,unaff_retaddr);
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
uVar2 = FUN_005df4c4();
|
|
|
|
*unaff_retaddr = uVar2;
|
|
|
|
return uVar2 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006793d0 at 0x006793D0 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006793d0(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff1f8;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679410 at 0x00679410 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00679410(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff1fc;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679450 at 0x00679450 (size: 64) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00679450(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff200;
|
|
|
|
if ((undefined4 *)param_1[0x18] != param_1 + 1) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x18]);
|
|
|
|
}
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679490 at 0x00679490 (size: 26) ---
|
|
|
|
|
|
int * __thiscall FUN_00679490(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0xc);
|
|
|
|
*param_2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return param_2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006794b0 at 0x006794B0 (size: 71) ---
|
|
|
|
|
|
void __thiscall FUN_006794b0(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 8);
|
|
|
|
if (iVar1 != *param_2) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*(int *)(param_1 + 8) = iVar1;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x006794ec. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679500 at 0x00679500 (size: 71) ---
|
|
|
|
|
|
void __thiscall FUN_00679500(int param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(param_1 + 0xc);
|
|
|
|
if (iVar1 != *param_2) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
*(int *)(param_1 + 0xc) = iVar1;
|
|
|
|
/* WARNING: Could not recover jumptable at 0x0067953c. Too many branches */
|
|
|
|
/* WARNING: Treating indirect jump as call */
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679550 at 0x00679550 (size: 83) ---
|
|
|
|
|
|
void __fastcall FUN_00679550(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)(param_1[3] + -0x14);
|
|
|
|
*param_1 = &PTR_FUN_007ff204;
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[3] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(param_1[2] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[2] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
*param_1 = &PTR_LAB_00796c4c;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006795b0 at 0x006795B0 (size: 30) ---
|
|
|
|
|
|
void * __thiscall FUN_006795b0(void *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_00679550();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006795d0 at 0x006795D0 (size: 152) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_006795d0(undefined4 *param_1,int param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
param_1[1] = 1;
|
|
|
|
*param_1 = &PTR_FUN_007ff204;
|
|
|
|
param_1[2] = param_2;
|
|
|
|
InterlockedIncrement((LONG *)(param_2 + -0x10));
|
|
|
|
param_1[3] = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(param_3 + -0x10));
|
|
|
|
param_1[4] = DAT_008f8704;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 7) = 1;
|
|
|
|
uVar1 = FUN_005df4c4();
|
|
|
|
param_1[8] = uVar1;
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_2 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(param_2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(param_2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(param_3 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(param_3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(param_3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679670 at 0x00679670 (size: 183) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_00679670(int *param_1,undefined4 param_2,int param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
char cVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
undefined4 *unaff_EBX;
|
|
|
|
int unaff_ESI;
|
|
|
|
int *piVar5;
|
|
|
|
int iVar6;
|
|
|
|
int **ppiVar7;
|
|
|
|
undefined4 uVar8;
|
|
|
|
int *local_4;
|
|
|
|
|
|
|
|
iVar2 = param_3;
|
|
|
|
puVar1 = (undefined4 *)(param_3 + -0x14);
|
|
|
|
local_4 = param_1;
|
|
|
|
InterlockedIncrement((LONG *)(param_3 + -0x10));
|
|
|
|
thunk_FUN_0040c720(¶m_3);
|
|
|
|
uVar8 = 1;
|
|
|
|
ppiVar7 = &local_4;
|
|
|
|
local_4 = (int *)0x0;
|
|
|
|
iVar6 = param_3;
|
|
|
|
InterlockedIncrement((LONG *)(param_3 + -0x10));
|
|
|
|
cVar3 = (**(code **)(*param_1 + 0x54))(iVar6,ppiVar7,uVar8);
|
|
|
|
piVar5 = local_4 + -5;
|
|
|
|
if (cVar3 == '\0') {
|
|
|
|
*unaff_EBX = DAT_008f8704;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*unaff_EBX = *(undefined4 *)(unaff_ESI + 0x10);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement(local_4 + -4);
|
|
|
|
if ((LVar4 == 0) && (piVar5 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar5)(1);
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(iVar2 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
return unaff_EBX;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_006797d0 at 0x006797D0 (size: 134) ---
|
|
|
|
|
|
uint __thiscall FUN_006797d0(int *param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
uint uVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined *puVar4;
|
|
|
|
LONG *lpAddend;
|
|
|
|
int *unaff_retaddr;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
local_4 = 0;
|
|
|
|
cVar1 = (**(code **)(*param_1 + 0x58))(param_2,param_3,&local_4);
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
uVar2 = (**(code **)(*param_1 + 0x5c))(param_3,unaff_retaddr);
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
puVar4 = (undefined *)*unaff_retaddr;
|
|
|
|
if (puVar4 != PTR_DAT_00818344) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(puVar4 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(puVar4 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar4 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*unaff_retaddr = (int)PTR_DAT_00818344;
|
|
|
|
puVar4 = (undefined *)InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
return (uint)puVar4 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679ae0 at 0x00679AE0 (size: 267) ---
|
|
|
|
|
|
undefined1 FUN_00679ae0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
byte bVar1;
|
|
|
|
char cVar2;
|
|
|
|
byte *pbVar3;
|
|
|
|
int iVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
undefined1 uVar6;
|
|
|
|
byte *pbVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
bool bVar9;
|
|
|
|
byte *local_4;
|
|
|
|
|
|
|
|
local_4 = PTR_DAT_00818344;
|
|
|
|
uVar6 = 0;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
puVar8 = param_1;
|
|
|
|
cVar2 = FUN_0040dc00(param_1,&local_4);
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
thunk_FUN_0040da10(&local_4,1);
|
|
|
|
pbVar7 = (byte *)*puVar8;
|
|
|
|
pbVar3 = local_4;
|
|
|
|
do {
|
|
|
|
bVar1 = *pbVar3;
|
|
|
|
bVar9 = bVar1 < *pbVar7;
|
|
|
|
if (bVar1 != *pbVar7) {
|
|
|
|
LAB_00679b55:
|
|
|
|
iVar4 = (1 - (uint)bVar9) - (uint)(bVar9 != 0);
|
|
|
|
goto LAB_00679b5a;
|
|
|
|
}
|
|
|
|
if (bVar1 == 0) break;
|
|
|
|
bVar1 = pbVar3[1];
|
|
|
|
bVar9 = bVar1 < pbVar7[1];
|
|
|
|
if (bVar1 != pbVar7[1]) goto LAB_00679b55;
|
|
|
|
pbVar3 = pbVar3 + 2;
|
|
|
|
pbVar7 = pbVar7 + 2;
|
|
|
|
} while (bVar1 != 0);
|
|
|
|
iVar4 = 0;
|
|
|
|
LAB_00679b5a:
|
|
|
|
if (iVar4 != 0) {
|
|
|
|
param_1 = (undefined4 *)PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
thunk_FUN_0040c780(¶m_1,&local_4);
|
|
|
|
thunk_FUN_0040c720(&local_4);
|
|
|
|
FUN_006794b0(¶m_1);
|
|
|
|
FUN_00679500(&local_4);
|
|
|
|
puVar8 = param_1 + -5;
|
|
|
|
uVar6 = 1;
|
|
|
|
LVar5 = InterlockedDecrement(param_1 + -4);
|
|
|
|
if ((LVar5 == 0) && (puVar8 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar8)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pbVar7 = local_4 + -0x14;
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (pbVar7 != (byte *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pbVar7)(1);
|
|
|
|
}
|
|
|
|
return uVar6;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_00679bf0 at 0x00679BF0 (size: 134) ---
|
|
|
|
|
|
bool FUN_00679bf0(char *param_1,char *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char *pcVar1;
|
|
|
|
char cVar2;
|
|
|
|
char *pcVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
char *pcVar5;
|
|
|
|
bool bVar6;
|
|
|
|
|
|
|
|
bVar6 = false;
|
|
|
|
pcVar3 = param_1;
|
|
|
|
pcVar5 = param_2;
|
|
|
|
if (*param_1 != '\0') {
|
|
|
|
do {
|
|
|
|
cVar2 = *pcVar3;
|
|
|
|
if (cVar2 == ':') {
|
|
|
|
bVar6 = bVar6 == false;
|
|
|
|
}
|
|
|
|
if (pcVar3 == param_1) {
|
|
|
|
LAB_00679c29:
|
|
|
|
if (cVar2 == '/') {
|
|
|
|
if (pcVar3[1] == '/') goto LAB_00679c3a;
|
|
|
|
*pcVar5 = '\\';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_00679c37:
|
|
|
|
*pcVar5 = cVar2;
|
|
|
|
}
|
|
|
|
pcVar5 = pcVar5 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (cVar2 != '/') goto LAB_00679c37;
|
|
|
|
if (pcVar3[1] != '/') goto LAB_00679c29;
|
|
|
|
}
|
|
|
|
LAB_00679c3a:
|
|
|
|
pcVar1 = pcVar3 + 1;
|
|
|
|
pcVar3 = pcVar3 + 1;
|
|
|
|
} while (*pcVar1 != '\0');
|
|
|
|
if ((param_2 < pcVar5) && (pcVar5[-1] == '\\')) {
|
|
|
|
pcVar5 = pcVar5 + -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*pcVar5 = '\0';
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(param_1 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (param_1 + -0x14 != (char *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(param_1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return bVar6;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a110 at 0x0067A110 (size: 67) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0067a110(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0xdc) + (param_2 % *(uint *)(param_1 + 0xe4)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
uVar2 = puVar1[2];
|
|
|
|
if (uVar2 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return CONCAT31((int3)(uVar2 >> 8),*(undefined1 *)(uVar2 + 1));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a160 at 0x0067A160 (size: 66) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0067a160(int param_1,uint param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
undefined1 *puVar2;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0xdc) + (param_2 % *(uint *)(param_1 + 0xe4)) * 4);
|
|
|
|
while( true ) {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (*puVar1 == param_2) break;
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
}
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
puVar2 = (undefined1 *)puVar1[2];
|
|
|
|
if (puVar2 == (undefined1 *)0x0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return CONCAT31((int3)((uint)puVar2 >> 8),*puVar2);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a1b0 at 0x0067A1B0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_0067a1b0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067ade0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a200 at 0x0067A200 (size: 157) ---
|
|
|
|
|
|
void __fastcall FUN_0067a200(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
*(undefined ***)(param_1 + 0x14) = &PTR_FUN_007ff208;
|
|
|
|
FUN_005870f0();
|
|
|
|
*(undefined ***)(param_1 + 0x18) = &PTR_FUN_007ff1f8;
|
|
|
|
if (*(void **)(param_1 + 0x78) != (void *)(param_1 + 0x1c)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x78));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x78) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x7c) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x80) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x84) = 0;
|
|
|
|
puVar2 = (undefined4 *)(*(int *)(param_1 + 0xc) + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(*(int *)(param_1 + 0xc) + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(*(int *)(param_1 + 8) + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(*(int *)(param_1 + 8) + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
puVar2 = (undefined4 *)(*(int *)(param_1 + 4) + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(*(int *)(param_1 + 4) + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a2f0 at 0x0067A2F0 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_0067a2f0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067aca0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a340 at 0x0067A340 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067a340(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007ff1f8;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a3d0 at 0x0067A3D0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067a3d0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007ff1fc;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a460 at 0x0067A460 (size: 77) ---
|
|
|
|
|
|
void __thiscall FUN_0067a460(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
if (*(int *)(param_1 + 0x68) * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_0067a1b0();
|
|
|
|
}
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x68);
|
|
|
|
uVar3 = FUN_0041aa50();
|
|
|
|
uVar3 = uVar3 % uVar1;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
*(undefined4 *)(param_2 + 4) = *(undefined4 *)(iVar2 + uVar3 * 4);
|
|
|
|
*(int *)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar1 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar1 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a4b0 at 0x0067A4B0 (size: 143) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067a4b0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
uint *puVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
uint uVar4;
|
|
|
|
int iVar5;
|
|
|
|
undefined4 *puVar6;
|
|
|
|
|
|
|
|
param_1[0x18] = 0;
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
*param_1 = &PTR_FUN_007ff200;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
puVar2 = (uint *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (uint *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
uVar4 = *puVar2;
|
|
|
|
param_1[0x1a] = uVar4;
|
|
|
|
if (uVar4 < 0x18) {
|
|
|
|
param_1[0x18] = param_1 + 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
uVar3 = thunk_FUN_005df0f5(uVar4 << 2);
|
|
|
|
param_1[0x18] = uVar3;
|
|
|
|
}
|
|
|
|
param_1[0x19] = (undefined4 *)param_1[0x18] + param_1[0x1a];
|
|
|
|
puVar6 = (undefined4 *)param_1[0x18];
|
|
|
|
for (uVar4 = param_1[0x1a] & 0x3fffffff; uVar4 != 0; uVar4 = uVar4 - 1) {
|
|
|
|
*puVar6 = 0;
|
|
|
|
puVar6 = puVar6 + 1;
|
|
|
|
}
|
|
|
|
for (iVar5 = 0; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
|
|
*(undefined1 *)puVar6 = 0;
|
|
|
|
puVar6 = (undefined4 *)((int)puVar6 + 1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067a540 at 0x0067A540 (size: 73) ---
|
|
|
|
|
|
void __fastcall FUN_0067a540(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x68);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067af20(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067abd0 at 0x0067ABD0 (size: 74) ---
|
|
|
|
|
|
void __fastcall FUN_0067abd0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
local_4 = *(undefined4 *)(param_1 + 0x6c);
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,&local_4,local_4,0);
|
|
|
|
if ((puVar2 != (undefined4 *)puVar1) || (puVar2 = puVar2 + -1, puVar2 != (undefined4 *)puVar1)) {
|
|
|
|
puVar2 = puVar2 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067aca0(*puVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067ac20 at 0x0067AC20 (size: 120) ---
|
|
|
|
|
|
uint __thiscall FUN_0067ac20(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_0067ac4b:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_0067a2f0();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_0067ac4b;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067aca0 at 0x0067ACA0 (size: 310) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0067aca0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int *piVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
uint *puVar9;
|
|
|
|
uint uVar10;
|
|
|
|
uint *puVar11;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
while (puVar3 != (uint *)0x0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
puVar11 = (uint *)puVar3[1];
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar8 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar8 != puVar4) || (puVar8 = puVar8 + -1, puVar8 != puVar4)) {
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067aca0(*puVar8);
|
|
|
|
}
|
|
|
|
uVar10 = *puVar3 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar3[1] = *(uint *)(iVar2 + uVar10 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar10 * 4) = puVar3;
|
|
|
|
uVar10 = iVar2 + uVar10 * 4;
|
|
|
|
if (uVar10 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar10;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
puVar3 = puVar11;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar11 = *(uint **)(param_1 + 100);
|
|
|
|
puVar9 = (uint *)*puVar11;
|
|
|
|
goto LAB_0067acef;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
puVar11 = (uint *)0x0;
|
|
|
|
puVar9 = (uint *)0x0;
|
|
|
|
LAB_0067acef:
|
|
|
|
puVar7 = (uint *)*puVar11;
|
|
|
|
if (puVar7 == puVar9) {
|
|
|
|
LAB_0067ad02:
|
|
|
|
*puVar11 = puVar7[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
puVar6 = puVar7;
|
|
|
|
puVar7 = (uint *)puVar6[1];
|
|
|
|
} while (puVar7 != puVar9);
|
|
|
|
if (puVar6 == (uint *)0x0) goto LAB_0067ad02;
|
|
|
|
puVar6[1] = puVar7[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
puVar9[1] = (uint)puVar3;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = puVar9;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067ade0 at 0x0067ADE0 (size: 320) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0067ade0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 *puVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
int *piVar10;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar6 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar3 = 0;
|
|
|
|
do {
|
|
|
|
if (iVar6 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
iVar2 = param_2;
|
|
|
|
while (iVar3 != 0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
iVar6 = *(int *)(iVar3 + 4);
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar7 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar7 != puVar4) || (puVar7 = puVar7 + -1, puVar7 != puVar4)) {
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067ade0(*puVar7);
|
|
|
|
iVar2 = param_2;
|
|
|
|
}
|
|
|
|
param_2 = iVar2;
|
|
|
|
uVar1 = *(uint *)(param_1 + 0x68);
|
|
|
|
uVar8 = FUN_0041aa50();
|
|
|
|
uVar8 = uVar8 % uVar1;
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
*(undefined4 *)(iVar3 + 4) = *(undefined4 *)(iVar2 + uVar8 * 4);
|
|
|
|
*(int *)(iVar2 + uVar8 * 4) = iVar3;
|
|
|
|
uVar1 = iVar2 + uVar8 * 4;
|
|
|
|
if (uVar1 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar1;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
iVar2 = param_2;
|
|
|
|
iVar3 = iVar6;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar10 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
piVar10 = *(int **)(param_1 + 100);
|
|
|
|
iVar9 = *piVar10;
|
|
|
|
goto LAB_0067ae2f;
|
|
|
|
}
|
|
|
|
piVar10 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar10;
|
|
|
|
}
|
|
|
|
piVar10 = (int *)0x0;
|
|
|
|
iVar9 = 0;
|
|
|
|
LAB_0067ae2f:
|
|
|
|
iVar6 = *piVar10;
|
|
|
|
if (iVar6 == iVar9) {
|
|
|
|
LAB_0067ae42:
|
|
|
|
*piVar10 = *(int *)(iVar6 + 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
iVar5 = iVar6;
|
|
|
|
iVar6 = *(int *)(iVar5 + 4);
|
|
|
|
} while (iVar6 != iVar9);
|
|
|
|
if (iVar5 == 0) goto LAB_0067ae42;
|
|
|
|
*(undefined4 *)(iVar5 + 4) = *(undefined4 *)(iVar6 + 4);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
*(int *)(iVar9 + 4) = iVar3;
|
|
|
|
iVar6 = *(int *)(param_1 + 0x6c);
|
|
|
|
iVar3 = iVar9;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067af20 at 0x0067AF20 (size: 310) ---
|
|
|
|
|
|
undefined4 __thiscall FUN_0067af20(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint *puVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
int *piVar5;
|
|
|
|
uint *puVar6;
|
|
|
|
uint *puVar7;
|
|
|
|
undefined4 *puVar8;
|
|
|
|
uint *puVar9;
|
|
|
|
uint uVar10;
|
|
|
|
uint *puVar11;
|
|
|
|
|
|
|
|
iVar2 = param_2;
|
|
|
|
if (param_2 == *(int *)(param_1 + 0x68)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = (uint *)0x0;
|
|
|
|
do {
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
if (*(void **)(param_1 + 0x60) != (void *)(param_1 + 4)) {
|
|
|
|
operator_delete__(*(void **)(param_1 + 0x60));
|
|
|
|
}
|
|
|
|
*(undefined4 *)(param_1 + 0x60) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 100) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x68) = 0;
|
|
|
|
*(undefined4 *)(param_1 + 0x6c) = 0;
|
|
|
|
FUN_00693b20(iVar2);
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
while (puVar3 != (uint *)0x0) {
|
|
|
|
param_2 = *(int *)(param_1 + 0x68);
|
|
|
|
puVar11 = (uint *)puVar3[1];
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
if (param_2 * 2 < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
puVar8 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,puVar4,¶m_2,param_2,0);
|
|
|
|
if ((puVar8 != puVar4) || (puVar8 = puVar8 + -1, puVar8 != puVar4)) {
|
|
|
|
puVar8 = puVar8 + 1;
|
|
|
|
}
|
|
|
|
FUN_0067af20(*puVar8);
|
|
|
|
}
|
|
|
|
uVar10 = *puVar3 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
puVar3[1] = *(uint *)(iVar2 + uVar10 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar10 * 4) = puVar3;
|
|
|
|
uVar10 = iVar2 + uVar10 * 4;
|
|
|
|
if (uVar10 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar10;
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
puVar4 = (undefined4 *)PTR_DAT_00818558;
|
|
|
|
puVar3 = puVar11;
|
|
|
|
}
|
|
|
|
PTR_DAT_00818558 = (undefined *)puVar4;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100);
|
|
|
|
while (piVar5 != (int *)(*(int *)(param_1 + 0x60) + *(int *)(param_1 + 0x68) * 4)) {
|
|
|
|
if (**(int **)(param_1 + 100) != 0) {
|
|
|
|
puVar11 = *(uint **)(param_1 + 100);
|
|
|
|
puVar9 = (uint *)*puVar11;
|
|
|
|
goto LAB_0067af6f;
|
|
|
|
}
|
|
|
|
piVar5 = *(int **)(param_1 + 100) + 1;
|
|
|
|
*(int **)(param_1 + 100) = piVar5;
|
|
|
|
}
|
|
|
|
puVar11 = (uint *)0x0;
|
|
|
|
puVar9 = (uint *)0x0;
|
|
|
|
LAB_0067af6f:
|
|
|
|
puVar7 = (uint *)*puVar11;
|
|
|
|
if (puVar7 == puVar9) {
|
|
|
|
LAB_0067af82:
|
|
|
|
*puVar11 = puVar7[1];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
do {
|
|
|
|
puVar6 = puVar7;
|
|
|
|
puVar7 = (uint *)puVar6[1];
|
|
|
|
} while (puVar7 != puVar9);
|
|
|
|
if (puVar6 == (uint *)0x0) goto LAB_0067af82;
|
|
|
|
puVar6[1] = puVar7[1];
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + -1;
|
|
|
|
puVar9[1] = (uint)puVar3;
|
|
|
|
iVar1 = *(int *)(param_1 + 0x6c);
|
|
|
|
puVar3 = puVar9;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b060 at 0x0067B060 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067b060(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff208;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_007ff1f8;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b0c0 at 0x0067B0C0 (size: 88) ---
|
|
|
|
|
|
undefined4 FUN_0067b0c0(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0067ac20(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b120 at 0x0067B120 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067b120(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff20c;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[1] = &PTR_FUN_007ff1fc;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b180 at 0x0067B180 (size: 157) ---
|
|
|
|
|
|
undefined4 FUN_0067b180(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
undefined1 local_c [8];
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
piVar2 = (int *)FUN_005df0f5(0xc);
|
|
|
|
if (piVar2 == (int *)0x0) {
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*piVar2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
piVar2[1] = 0;
|
|
|
|
piVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
FUN_0041aeb0(local_c,piVar2);
|
|
|
|
if (local_4 == 0) {
|
|
|
|
FUN_0067a460(piVar2);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (piVar2 != (int *)0x0) {
|
|
|
|
puVar4 = (undefined4 *)(*piVar2 + -0x14);
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(*piVar2 + -0x10));
|
|
|
|
if ((LVar3 == 0) && (puVar4 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar4)(1);
|
|
|
|
}
|
|
|
|
operator_delete(piVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b220 at 0x0067B220 (size: 120) ---
|
|
|
|
|
|
uint __thiscall FUN_0067b220(int param_1,uint *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
uint uVar3;
|
|
|
|
|
|
|
|
puVar1 = *(uint **)(*(int *)(param_1 + 0x60) + (*param_2 % *(uint *)(param_1 + 0x68)) * 4);
|
|
|
|
do {
|
|
|
|
if (puVar1 == (uint *)0x0) {
|
|
|
|
LAB_0067b24b:
|
|
|
|
if ((int)(*(uint *)(param_1 + 0x68) * 2) < *(int *)(param_1 + 0x6c) + 1) {
|
|
|
|
FUN_0067a540();
|
|
|
|
}
|
|
|
|
uVar3 = *param_2 % *(uint *)(param_1 + 0x68);
|
|
|
|
iVar2 = *(int *)(param_1 + 0x60);
|
|
|
|
param_2[1] = *(uint *)(iVar2 + uVar3 * 4);
|
|
|
|
*(uint **)(iVar2 + uVar3 * 4) = param_2;
|
|
|
|
uVar3 = iVar2 + uVar3 * 4;
|
|
|
|
if (uVar3 < *(uint *)(param_1 + 100)) {
|
|
|
|
*(uint *)(param_1 + 100) = uVar3;
|
|
|
|
}
|
|
|
|
iVar2 = *(int *)(param_1 + 0x6c) + 1;
|
|
|
|
*(int *)(param_1 + 0x6c) = iVar2;
|
|
|
|
return CONCAT31((int3)((uint)iVar2 >> 8),1);
|
|
|
|
}
|
|
|
|
if (*puVar1 == *param_2) {
|
|
|
|
if (puVar1 != (uint *)0x0) {
|
|
|
|
return (uint)puVar1 & 0xffffff00;
|
|
|
|
}
|
|
|
|
goto LAB_0067b24b;
|
|
|
|
}
|
|
|
|
puVar1 = (uint *)puVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067b2a0 at 0x0067B2A0 (size: 92) ---
|
|
|
|
|
|
int __fastcall FUN_0067b2a0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 4) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 8) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818344 + -0x10);
|
|
|
|
*(undefined **)(param_1 + 0xc) = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
*(undefined ***)(param_1 + 0x14) = &PTR_FUN_007ff208;
|
|
|
|
FUN_0067a340(0x800);
|
|
|
|
*(undefined ***)(param_1 + 0x14) = &PTR_FUN_007ff208;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067be80 at 0x0067BE80 (size: 88) ---
|
|
|
|
|
|
undefined4 FUN_0067be80(undefined4 *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 == (undefined4 *)0x0) {
|
|
|
|
puVar2 = (undefined4 *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*puVar2 = *param_1;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = *param_2;
|
|
|
|
}
|
|
|
|
cVar1 = FUN_0067b220(puVar2);
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
operator_delete(puVar2);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067bee0 at 0x0067BEE0 (size: 402) ---
|
|
|
|
|
|
void __fastcall FUN_0067bee0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
void *pvVar3;
|
|
|
|
int *piVar4;
|
|
|
|
int iVar5;
|
|
|
|
int iVar6;
|
|
|
|
int *piStack_14;
|
|
|
|
undefined1 local_c [12];
|
|
|
|
|
|
|
|
piVar4 = (int *)FUN_0052dcf0(local_c);
|
|
|
|
iVar6 = piVar4[2];
|
|
|
|
iVar5 = *piVar4;
|
|
|
|
piVar4 = (int *)piVar4[1];
|
|
|
|
while (iVar6 != 0) {
|
|
|
|
do {
|
|
|
|
puVar2 = *(undefined4 **)(iVar6 + 8);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
piVar1 = puVar2 + 1;
|
|
|
|
*piVar1 = *piVar1 + -1;
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar6 = *(int *)(iVar6 + 4);
|
|
|
|
} while (iVar6 != 0);
|
|
|
|
do {
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
if (piVar4 == (int *)(*(int *)(iVar5 + 0x60) + *(int *)(iVar5 + 0x68) * 4)) goto LAB_0067bf43;
|
|
|
|
iVar6 = *piVar4;
|
|
|
|
} while (iVar6 == 0);
|
|
|
|
}
|
|
|
|
LAB_0067bf43:
|
|
|
|
FUN_00433a10();
|
|
|
|
piVar4 = *(int **)(param_1 + 0xe0);
|
|
|
|
do {
|
|
|
|
if (piVar4 == (int *)(*(int *)(param_1 + 0xdc) + *(int *)(param_1 + 0xe4) * 4)) {
|
|
|
|
piStack_14 = (int *)0x0;
|
|
|
|
iVar5 = 0;
|
|
|
|
joined_r0x0067bf8a:
|
|
|
|
while (iVar5 != 0) {
|
|
|
|
do {
|
|
|
|
pvVar3 = *(void **)(iVar5 + 8);
|
|
|
|
piVar4 = *(int **)((int)pvVar3 + 0x7c);
|
|
|
|
while (piVar4 != (int *)(*(int *)((int)pvVar3 + 0x78) + *(int *)((int)pvVar3 + 0x80) * 4))
|
|
|
|
{
|
|
|
|
if (**(int **)((int)pvVar3 + 0x7c) != 0) {
|
|
|
|
piVar4 = *(int **)((int)pvVar3 + 0x7c);
|
|
|
|
iVar6 = *piVar4;
|
|
|
|
goto joined_r0x0067bfd1;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)((int)pvVar3 + 0x7c) + 1;
|
|
|
|
*(int **)((int)pvVar3 + 0x7c) = piVar4;
|
|
|
|
}
|
|
|
|
piVar4 = (int *)0x0;
|
|
|
|
iVar6 = 0;
|
|
|
|
joined_r0x0067bfd1:
|
|
|
|
while (iVar6 != 0) {
|
|
|
|
do {
|
|
|
|
puVar2 = *(undefined4 **)(iVar6 + 8);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
piVar1 = puVar2 + 1;
|
|
|
|
*piVar1 = *piVar1 + -1;
|
|
|
|
if (*piVar1 == 0) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar6 = *(int *)(iVar6 + 4);
|
|
|
|
} while (iVar6 != 0);
|
|
|
|
do {
|
|
|
|
piVar4 = piVar4 + 1;
|
|
|
|
if (piVar4 == (int *)(*(int *)((int)pvVar3 + 0x78) + *(int *)((int)pvVar3 + 0x80) * 4)
|
|
|
|
) goto LAB_0067c008;
|
|
|
|
iVar6 = *piVar4;
|
|
|
|
} while (iVar6 == 0);
|
|
|
|
}
|
|
|
|
LAB_0067c008:
|
|
|
|
FUN_005870f0();
|
|
|
|
if (pvVar3 != (void *)0x0) {
|
|
|
|
FUN_0067a200();
|
|
|
|
operator_delete(pvVar3);
|
|
|
|
}
|
|
|
|
iVar5 = *(int *)(iVar5 + 4);
|
|
|
|
} while (iVar5 != 0);
|
|
|
|
do {
|
|
|
|
piStack_14 = piStack_14 + 1;
|
|
|
|
if (piStack_14 == (int *)(*(int *)(param_1 + 0xdc) + *(int *)(param_1 + 0xe4) * 4))
|
|
|
|
goto LAB_0067c063;
|
|
|
|
iVar5 = *piStack_14;
|
|
|
|
} while (iVar5 == 0);
|
|
|
|
}
|
|
|
|
LAB_0067c063:
|
|
|
|
FUN_005870f0();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (**(int **)(param_1 + 0xe0) != 0) {
|
|
|
|
piStack_14 = *(int **)(param_1 + 0xe0);
|
|
|
|
iVar5 = *piStack_14;
|
|
|
|
goto joined_r0x0067bf8a;
|
|
|
|
}
|
|
|
|
piVar4 = *(int **)(param_1 + 0xe0) + 1;
|
|
|
|
*(int **)(param_1 + 0xe0) = piVar4;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c190 at 0x0067C190 (size: 82) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067c190(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff278;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[1] = &PTR_FUN_007ff200;
|
|
|
|
if ((undefined4 *)param_1[0x19] != param_1 + 2) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x19]);
|
|
|
|
}
|
|
|
|
param_1[0x19] = 0;
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c1f0 at 0x0067C1F0 (size: 130) ---
|
|
|
|
|
|
void __fastcall FUN_0067c1f0(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff210;
|
|
|
|
FUN_0067bee0();
|
|
|
|
param_1[0x1e] = &PTR_FUN_007ff278;
|
|
|
|
FUN_005870f0();
|
|
|
|
param_1[0x1f] = &PTR_FUN_007ff200;
|
|
|
|
if ((undefined4 *)param_1[0x37] != param_1 + 0x20) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x37]);
|
|
|
|
}
|
|
|
|
param_1[0x37] = 0;
|
|
|
|
param_1[0x38] = 0;
|
|
|
|
param_1[0x39] = 0;
|
|
|
|
param_1[0x3a] = 0;
|
|
|
|
param_1[1] = &PTR_FUN_007ff20c;
|
|
|
|
FUN_00433a10();
|
|
|
|
param_1[2] = &PTR_FUN_007ff1fc;
|
|
|
|
if ((undefined4 *)param_1[0x1a] != param_1 + 3) {
|
|
|
|
operator_delete__((undefined4 *)param_1[0x1a]);
|
|
|
|
}
|
|
|
|
param_1[0x1a] = 0;
|
|
|
|
param_1[0x1b] = 0;
|
|
|
|
param_1[0x1c] = 0;
|
|
|
|
param_1[0x1d] = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c280 at 0x0067C280 (size: 129) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067c280(undefined4 *param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
*param_1 = &PTR_FUN_007ff210;
|
|
|
|
param_1[1] = &PTR_FUN_007ff20c;
|
|
|
|
FUN_0067a3d0(0);
|
|
|
|
param_1[1] = &PTR_FUN_007ff20c;
|
|
|
|
param_1[0x1e] = &PTR_FUN_007ff278;
|
|
|
|
FUN_0067a4b0(0);
|
|
|
|
param_1[0x1e] = &PTR_FUN_007ff278;
|
|
|
|
puVar1 = PTR_DAT_00818558;
|
|
|
|
if (param_2 != 0) {
|
|
|
|
puVar2 = (undefined4 *)FUN_00422d20(PTR_DAT_00818554,PTR_DAT_00818558,¶m_2,param_2,0);
|
|
|
|
if (puVar2 == (undefined4 *)puVar1) {
|
|
|
|
puVar2 = puVar2 + -1;
|
|
|
|
}
|
|
|
|
FUN_0067ade0(*puVar2);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c690 at 0x0067C690 (size: 37) ---
|
|
|
|
|
|
undefined4 FUN_0067c690(wchar_t param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
wchar_t *pwVar1;
|
|
|
|
|
|
|
|
if (param_1 != L'\0') {
|
|
|
|
pwVar1 = wcschr(L"[]!{}#\\|^$",param_1);
|
|
|
|
if (pwVar1 != (wchar_t *)0x0) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c6c0 at 0x0067C6C0 (size: 86) ---
|
|
|
|
|
|
wchar_t FUN_0067c6c0(wchar_t param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
wchar_t *pwVar1;
|
|
|
|
|
|
|
|
switch(param_1) {
|
|
|
|
case L'\t':
|
|
|
|
return L't';
|
|
|
|
case L'\n':
|
|
|
|
return L'n';
|
|
|
|
case L'\r':
|
|
|
|
return L'r';
|
|
|
|
case L'\"':
|
|
|
|
return L'q';
|
|
|
|
}
|
|
|
|
if ((param_1 != L'\0') && (pwVar1 = wcschr(L"[]!{}#\\|^$",param_1), pwVar1 != (wchar_t *)0x0)) {
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
return L'\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c750 at 0x0067C750 (size: 79) ---
|
|
|
|
|
|
uint FUN_0067c750(wchar_t param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined2 uVar3;
|
|
|
|
wchar_t *pwVar2;
|
|
|
|
|
|
|
|
iVar1 = (ushort)param_1 - 0x6e;
|
|
|
|
uVar3 = (undefined2)((uint)iVar1 >> 0x10);
|
|
|
|
switch(iVar1) {
|
|
|
|
case 0:
|
|
|
|
return CONCAT22(uVar3,10);
|
|
|
|
case 3:
|
|
|
|
return CONCAT22(uVar3,0x22);
|
|
|
|
case 4:
|
|
|
|
return CONCAT22(uVar3,0xd);
|
|
|
|
case 6:
|
|
|
|
return CONCAT22(uVar3,9);
|
|
|
|
}
|
|
|
|
if ((param_1 != L'\0') && (pwVar2 = wcschr(L"[]!{}#\\|^$",param_1), pwVar2 != (wchar_t *)0x0)) {
|
|
|
|
return (uint)(ushort)param_1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c7c0 at 0x0067C7C0 (size: 39) ---
|
|
|
|
|
|
uint FUN_0067c7c0(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
|
|
|
|
if ((DAT_00837cc8 != (int *)0x0) && (*DAT_00837cc8 != 0)) {
|
|
|
|
uVar1 = FUN_00422160(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
return (uint)(param_1 == 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c7f0 at 0x0067C7F0 (size: 443) ---
|
|
|
|
|
|
undefined1 FUN_0067c7f0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
undefined *puVar3;
|
|
|
|
bool bVar4;
|
|
|
|
undefined *_Dest;
|
|
|
|
ushort *puVar5;
|
|
|
|
LONG LVar6;
|
|
|
|
short *psVar7;
|
|
|
|
uint uVar8;
|
|
|
|
uint uVar9;
|
|
|
|
undefined1 local_d;
|
|
|
|
uint local_8;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
_Dest = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
uVar9 = *(int *)(*param_1 + -4) - 1;
|
|
|
|
local_d = 0;
|
|
|
|
bVar4 = false;
|
|
|
|
uVar8 = 0;
|
|
|
|
local_4 = uVar9;
|
|
|
|
if (uVar9 != 0) {
|
|
|
|
do {
|
|
|
|
iVar1 = *param_1;
|
|
|
|
uVar2 = *(uint *)(iVar1 + -4);
|
|
|
|
psVar7 = (short *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
if (uVar8 < uVar2) {
|
|
|
|
psVar7 = (short *)(iVar1 + uVar8 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 0x20) {
|
|
|
|
LAB_0067c884:
|
|
|
|
if (bVar4) {
|
|
|
|
local_d = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar8 < uVar2) {
|
|
|
|
puVar5 = (ushort *)(iVar1 + uVar8 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar5 = (ushort *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
}
|
|
|
|
local_8 = (uint)*puVar5;
|
|
|
|
if (*puVar5 != 0) {
|
|
|
|
iVar1 = *(int *)(_Dest + -4);
|
|
|
|
if ((*(int *)(_Dest + -0x10) == 1) && (iVar1 + 1U <= *(uint *)(_Dest + -0xc))) {
|
|
|
|
*(uint *)(_Dest + -4) = iVar1 + 1U;
|
|
|
|
*(undefined4 *)(_Dest + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar1);
|
|
|
|
wcscpy((wchar_t *)_Dest,(wchar_t *)_Dest);
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(_Dest + iVar1 * 2 + -2),(wchar_t *)&local_8,1);
|
|
|
|
*(undefined2 *)(_Dest + *(int *)(_Dest + -4) * 2 + -2) = 0;
|
|
|
|
uVar9 = local_4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bVar4 = true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
psVar7 = (short *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
if (uVar8 < uVar2) {
|
|
|
|
psVar7 = (short *)(iVar1 + uVar8 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 9) goto LAB_0067c884;
|
|
|
|
if (uVar8 < uVar2) {
|
|
|
|
puVar5 = (ushort *)(iVar1 + uVar8 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar5 = (ushort *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
}
|
|
|
|
local_8 = (uint)*puVar5;
|
|
|
|
FUN_00402490(&local_8,1);
|
|
|
|
bVar4 = false;
|
|
|
|
}
|
|
|
|
uVar8 = uVar8 + 1;
|
|
|
|
} while (uVar8 < uVar9);
|
|
|
|
}
|
|
|
|
puVar3 = (undefined *)*param_1;
|
|
|
|
if (puVar3 != _Dest) {
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(puVar3 + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(puVar3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
*param_1 = (int)_Dest;
|
|
|
|
InterlockedIncrement((LONG *)(_Dest + -0x10));
|
|
|
|
}
|
|
|
|
LVar6 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar6 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
return local_d;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c9b0 at 0x0067C9B0 (size: 50) ---
|
|
|
|
|
|
void FUN_0067c9b0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = DAT_00837750;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_00837750 + -0x10));
|
|
|
|
FUN_004d68c0(1,0,iVar1);
|
|
|
|
FUN_0067c7f0(param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067c9f0 at 0x0067C9F0 (size: 247) ---
|
|
|
|
|
|
int * FUN_0067c9f0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
wint_t wVar2;
|
|
|
|
int iVar3;
|
|
|
|
wint_t *pwVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint uVar7;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
uVar6 = *(int *)(iVar1 + -4) - 1;
|
|
|
|
uVar7 = 0;
|
|
|
|
if (*(int *)(iVar1 + -4) != 1) {
|
|
|
|
do {
|
|
|
|
if (uVar7 < *(uint *)(iVar1 + -4)) {
|
|
|
|
pwVar4 = (wint_t *)(iVar1 + uVar7 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar4 = (wint_t *)(iVar1 + -2 + *(uint *)(iVar1 + -4) * 2);
|
|
|
|
}
|
|
|
|
wVar2 = *pwVar4;
|
|
|
|
iVar3 = iswspace(wVar2);
|
|
|
|
if (((((iVar3 == 0) && (iVar3 = iswpunct(wVar2), iVar3 == 0)) && (wVar2 != 0xbf)) &&
|
|
|
|
(wVar2 != 0xa1)) || (((wVar2 == 0x5c || (wVar2 == 0x2f)) || (wVar2 == 0x40)))) {
|
|
|
|
if (uVar7 < uVar6) {
|
|
|
|
if (uVar7 < *(uint *)(iVar1 + -4)) {
|
|
|
|
pwVar4 = (wint_t *)(iVar1 + uVar7 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar4 = (wint_t *)(iVar1 + -2 + *(uint *)(iVar1 + -4) * 2);
|
|
|
|
}
|
|
|
|
wVar2 = towupper(*pwVar4);
|
|
|
|
FUN_004089f0(uVar7,wVar2);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
uVar7 = uVar7 + 1;
|
|
|
|
} while (uVar7 < uVar6);
|
|
|
|
}
|
|
|
|
*param_1 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067caf0 at 0x0067CAF0 (size: 198) ---
|
|
|
|
|
|
int * FUN_0067caf0(int *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
iVar1 = *param_2;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
iVar2 = FUN_0040b340(iVar1,0x5b,0x5c);
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
iVar2 = iVar2 - iVar1 >> 1;
|
|
|
|
if (iVar2 != 0) {
|
|
|
|
FUN_0040b150(iVar2);
|
|
|
|
}
|
|
|
|
FUN_0040ba00();
|
|
|
|
iVar2 = DAT_00837750;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_00837750 + -0x10));
|
|
|
|
FUN_004d68c0(0,1,iVar2);
|
|
|
|
}
|
|
|
|
*param_1 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067cbc0 at 0x0067CBC0 (size: 500) ---
|
|
|
|
|
|
undefined4 * FUN_0067cbc0(undefined4 *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *_Dest;
|
|
|
|
int iVar1;
|
|
|
|
undefined2 *puVar2;
|
|
|
|
uint uVar3;
|
|
|
|
ushort *puVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
uint local_8;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
_Dest = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
iVar1 = *param_2;
|
|
|
|
uVar3 = *(uint *)(iVar1 + -4);
|
|
|
|
local_8 = 0;
|
|
|
|
if (uVar3 != 1) {
|
|
|
|
do {
|
|
|
|
if (local_8 < uVar3) {
|
|
|
|
puVar2 = (undefined2 *)(iVar1 + local_8 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar2 = (undefined2 *)(iVar1 + -2 + uVar3 * 2);
|
|
|
|
}
|
|
|
|
uVar3 = FUN_0067c6c0(*puVar2);
|
|
|
|
if ((short)uVar3 == 0) {
|
|
|
|
iVar1 = *param_2;
|
|
|
|
if (local_8 < *(uint *)(iVar1 + -4)) {
|
|
|
|
puVar4 = (ushort *)(iVar1 + local_8 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar4 = (ushort *)(iVar1 + -2 + *(uint *)(iVar1 + -4) * 2);
|
|
|
|
}
|
|
|
|
local_4 = (uint)*puVar4;
|
|
|
|
if (*puVar4 != 0) goto LAB_0067ccd6;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_4 = 0x5c;
|
|
|
|
iVar1 = *(int *)(_Dest + -4);
|
|
|
|
if ((*(int *)(_Dest + -0x10) == 1) && (iVar1 + 1U <= *(uint *)(_Dest + -0xc))) {
|
|
|
|
*(uint *)(_Dest + -4) = iVar1 + 1U;
|
|
|
|
*(undefined4 *)(_Dest + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar1);
|
|
|
|
wcscpy((wchar_t *)_Dest,(wchar_t *)_Dest);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(_Dest + iVar1 * 2 + -2),(wchar_t *)&local_4,1);
|
|
|
|
*(undefined2 *)(_Dest + *(int *)(_Dest + -4) * 2 + -2) = 0;
|
|
|
|
local_4 = uVar3;
|
|
|
|
LAB_0067ccd6:
|
|
|
|
iVar1 = *(int *)(_Dest + -4);
|
|
|
|
if ((*(int *)(_Dest + -0x10) == 1) && (iVar1 + 1U <= *(uint *)(_Dest + -0xc))) {
|
|
|
|
*(uint *)(_Dest + -4) = iVar1 + 1U;
|
|
|
|
*(undefined4 *)(_Dest + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar1);
|
|
|
|
wcscpy((wchar_t *)_Dest,(wchar_t *)_Dest);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(_Dest + iVar1 * 2 + -2),(wchar_t *)&local_4,1);
|
|
|
|
*(undefined2 *)(_Dest + *(int *)(_Dest + -4) * 2 + -2) = 0;
|
|
|
|
}
|
|
|
|
iVar1 = *param_2;
|
|
|
|
uVar3 = *(uint *)(iVar1 + -4);
|
|
|
|
local_8 = local_8 + 1;
|
|
|
|
} while (local_8 < uVar3 - 1);
|
|
|
|
}
|
|
|
|
*param_1 = _Dest;
|
|
|
|
InterlockedIncrement((LONG *)(_Dest + -0x10));
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067cdc0 at 0x0067CDC0 (size: 396) ---
|
|
|
|
|
|
undefined4 * FUN_0067cdc0(undefined4 *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
undefined *_Dest;
|
|
|
|
int *piVar2;
|
|
|
|
int iVar3;
|
|
|
|
undefined2 *puVar4;
|
|
|
|
undefined4 uVar5;
|
|
|
|
ushort *puVar6;
|
|
|
|
LONG LVar7;
|
|
|
|
int *piVar8;
|
|
|
|
int *piVar9;
|
|
|
|
short *psVar10;
|
|
|
|
uint uVar11;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
_Dest = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
piVar2 = param_2;
|
|
|
|
iVar3 = *param_2;
|
|
|
|
piVar8 = *(int **)(iVar3 + -4);
|
|
|
|
uVar11 = 0;
|
|
|
|
if (piVar8 != (int *)0x1) {
|
|
|
|
param_2 = (int *)0x1;
|
|
|
|
do {
|
|
|
|
piVar9 = param_2;
|
|
|
|
if (param_2 < piVar8) {
|
|
|
|
puVar4 = (undefined2 *)(iVar3 + 2 + uVar11 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar4 = (undefined2 *)(iVar3 + -2 + (int)piVar8 * 2);
|
|
|
|
}
|
|
|
|
uVar5 = FUN_0067c750(*puVar4);
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
uVar1 = *(uint *)(iVar3 + -4);
|
|
|
|
psVar10 = (short *)(iVar3 + -2 + uVar1 * 2);
|
|
|
|
if (uVar11 < uVar1) {
|
|
|
|
psVar10 = (short *)(iVar3 + uVar11 * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar10 == 0x5c) && ((short)uVar5 != 0)) {
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
param_2 = (int *)uVar5;
|
|
|
|
FUN_00402490(¶m_2,1);
|
|
|
|
piVar9 = (int *)((int)piVar9 + 1);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar6 = (ushort *)(iVar3 + -2 + uVar1 * 2);
|
|
|
|
if (uVar11 < uVar1) {
|
|
|
|
puVar6 = (ushort *)(iVar3 + uVar11 * 2);
|
|
|
|
}
|
|
|
|
local_4 = (uint)*puVar6;
|
|
|
|
if (*puVar6 != 0) {
|
|
|
|
iVar3 = *(int *)(_Dest + -4);
|
|
|
|
if ((*(int *)(_Dest + -0x10) == 1) && (iVar3 + 1U <= *(uint *)(_Dest + -0xc))) {
|
|
|
|
*(uint *)(_Dest + -4) = iVar3 + 1U;
|
|
|
|
*(undefined4 *)(_Dest + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar3);
|
|
|
|
wcscpy((wchar_t *)_Dest,(wchar_t *)_Dest);
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(_Dest + iVar3 * 2 + -2),(wchar_t *)&local_4,1);
|
|
|
|
*(undefined2 *)(_Dest + *(int *)(_Dest + -4) * 2 + -2) = 0;
|
|
|
|
piVar9 = param_2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar3 = *piVar2;
|
|
|
|
piVar8 = *(int **)(iVar3 + -4);
|
|
|
|
uVar11 = uVar11 + 1;
|
|
|
|
param_2 = (int *)((int)piVar9 + 1);
|
|
|
|
} while (uVar11 < (int)piVar8 - 1U);
|
|
|
|
}
|
|
|
|
*param_1 = _Dest;
|
|
|
|
InterlockedIncrement((LONG *)(_Dest + -0x10));
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067cf50 at 0x0067CF50 (size: 43) ---
|
|
|
|
|
|
undefined4 FUN_0067cf50(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((DAT_00837cc8 != (int *)0x0) && (*DAT_00837cc8 != 0)) {
|
|
|
|
uVar1 = FUN_00422650(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
FUN_00407e40(&DAT_007ff2b8);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067cf80 at 0x0067CF80 (size: 43) ---
|
|
|
|
|
|
undefined4 FUN_0067cf80(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((DAT_00837cc8 != (int *)0x0) && (*DAT_00837cc8 != 0)) {
|
|
|
|
uVar1 = FUN_004226a0(param_1);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
FUN_00407e40(&DAT_007ff2c0);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067cfb0 at 0x0067CFB0 (size: 81) ---
|
|
|
|
|
|
undefined4 FUN_0067cfb0(undefined4 param_1,undefined4 param_2,undefined4 param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 uVar1;
|
|
|
|
|
|
|
|
if ((DAT_00837cc8 != (int *)0x0) && (*DAT_00837cc8 != 0)) {
|
|
|
|
uVar1 = FUN_004226f0(param_1,param_2,param_3);
|
|
|
|
return uVar1;
|
|
|
|
}
|
|
|
|
FUN_00407e40(&DAT_007ff2d8);
|
|
|
|
FUN_00407e40(L"mfnp");
|
|
|
|
FUN_00407e40(&DAT_007ff2c8);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d010 at 0x0067D010 (size: 109) ---
|
|
|
|
|
|
uint __thiscall FUN_0067d010(int *param_1,undefined4 *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
wchar_t *_Str2;
|
|
|
|
wchar_t *_Str1;
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
|
|
|
|
uVar2 = 0;
|
|
|
|
if (param_1[2] != 0) {
|
|
|
|
do {
|
|
|
|
_Str2 = (wchar_t *)*param_2;
|
|
|
|
_Str1 = *(wchar_t **)(*param_1 + uVar2 * 4);
|
|
|
|
if (*(int *)(_Str1 + -2) == *(int *)(_Str2 + -2)) {
|
|
|
|
if ((((*(int *)(_Str1 + -4) == *(int *)(_Str2 + -4)) || (*(int *)(_Str1 + -4) == -1)) ||
|
|
|
|
(*(int *)(_Str2 + -4) == -1)) && (iVar1 = wcscmp(_Str1,_Str2), iVar1 == 0)) {
|
|
|
|
return uVar2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar2 = uVar2 + 1;
|
|
|
|
} while (uVar2 < (uint)param_1[2]);
|
|
|
|
}
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d080 at 0x0067D080 (size: 157) ---
|
|
|
|
|
|
int FUN_0067d080(undefined4 *param_1,int *param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
uint uVar2;
|
|
|
|
wchar_t *pwVar3;
|
|
|
|
short *psVar4;
|
|
|
|
uint uVar5;
|
|
|
|
int iVar6;
|
|
|
|
undefined4 local_4;
|
|
|
|
|
|
|
|
uVar5 = 0;
|
|
|
|
iVar6 = *(int *)(*param_2 + -4) + -1;
|
|
|
|
local_4 = 0;
|
|
|
|
if (*(int *)(*param_2 + -4) == 1) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
if (0 < iVar6) {
|
|
|
|
do {
|
|
|
|
iVar1 = *param_2;
|
|
|
|
uVar2 = *(uint *)(iVar1 + -4);
|
|
|
|
psVar4 = (short *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
if (uVar5 < uVar2) {
|
|
|
|
psVar4 = (short *)(iVar1 + uVar5 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar4 == 0x21) {
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
if (uVar5 < uVar2) {
|
|
|
|
pwVar3 = (wchar_t *)(iVar1 + uVar5 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar3 = (wchar_t *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
}
|
|
|
|
pwVar3 = wcschr((wchar_t *)*param_1,*pwVar3);
|
|
|
|
if (pwVar3 == (wchar_t *)0x0) {
|
|
|
|
LAB_0067d109:
|
|
|
|
local_4 = local_4 + 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (uVar5 < uVar2) {
|
|
|
|
pwVar3 = (wchar_t *)(iVar1 + uVar5 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar3 = (wchar_t *)(iVar1 + -2 + uVar2 * 2);
|
|
|
|
}
|
|
|
|
pwVar3 = wcschr((wchar_t *)*param_1,*pwVar3);
|
|
|
|
if (pwVar3 != (wchar_t *)0x0) goto LAB_0067d109;
|
|
|
|
}
|
|
|
|
uVar5 = uVar5 + 1;
|
|
|
|
} while ((int)uVar5 < iVar6);
|
|
|
|
}
|
|
|
|
return local_4;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d120 at 0x0067D120 (size: 83) ---
|
|
|
|
|
|
void FUN_0067d120(undefined4 *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
DAT_008f87f8 = *param_1;
|
|
|
|
DAT_008f87fc = param_1[1];
|
|
|
|
if (DAT_008f8800 != param_1[2]) {
|
|
|
|
puVar1 = (undefined4 *)(DAT_008f8800 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(DAT_008f8800 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = param_1[2];
|
|
|
|
InterlockedIncrement((LONG *)(DAT_008f8800 + -0x10));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d180 at 0x0067D180 (size: 83) ---
|
|
|
|
|
|
void FUN_0067d180(undefined4 param_1,undefined4 param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
|
|
|
|
DAT_008f87f8 = param_1;
|
|
|
|
DAT_008f87fc = param_2;
|
|
|
|
if (DAT_008f8800 != *param_3) {
|
|
|
|
puVar1 = (undefined4 *)(DAT_008f8800 + -0x14);
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(DAT_008f8800 + -0x10));
|
|
|
|
if ((LVar2 == 0) && (puVar1 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar1)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = *param_3;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_008f8800 + -0x10));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d1e0 at 0x0067D1E0 (size: 70) ---
|
|
|
|
|
|
int FUN_0067d1e0(int param_1,int param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
int iVar4;
|
|
|
|
|
|
|
|
piVar3 = *(int **)(param_2 + 0xc);
|
|
|
|
iVar2 = 0;
|
|
|
|
iVar4 = -1;
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
do {
|
|
|
|
iVar1 = FUN_0067d080(param_1 + 0x20,*piVar3 + 0x20);
|
|
|
|
if ((iVar4 <= iVar1) && (0 < iVar1)) {
|
|
|
|
iVar2 = *piVar3;
|
|
|
|
iVar4 = iVar1;
|
|
|
|
}
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
} while (piVar3 != (int *)0x0);
|
|
|
|
}
|
|
|
|
return iVar2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d230 at 0x0067D230 (size: 337) ---
|
|
|
|
|
|
undefined4 * FUN_0067d230(undefined4 *param_1,undefined4 *param_2,int *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *_Dest;
|
|
|
|
int *piVar1;
|
|
|
|
int iVar2;
|
|
|
|
wchar_t *pwVar3;
|
|
|
|
ushort *puVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
uint uVar6;
|
|
|
|
uint uVar7;
|
|
|
|
|
|
|
|
_Dest = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
piVar1 = param_3;
|
|
|
|
iVar2 = *param_3;
|
|
|
|
uVar6 = *(uint *)(iVar2 + -4);
|
|
|
|
uVar7 = 0;
|
|
|
|
if (uVar6 != 1) {
|
|
|
|
do {
|
|
|
|
if (uVar7 < uVar6) {
|
|
|
|
pwVar3 = (wchar_t *)(iVar2 + uVar7 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar3 = (wchar_t *)(iVar2 + -2 + uVar6 * 2);
|
|
|
|
}
|
|
|
|
pwVar3 = wcschr((wchar_t *)*param_2,*pwVar3);
|
|
|
|
if (pwVar3 != (wchar_t *)0x0) {
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
if (uVar7 < *(uint *)(iVar2 + -4)) {
|
|
|
|
puVar4 = (ushort *)(iVar2 + uVar7 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar4 = (ushort *)(iVar2 + -2 + *(uint *)(iVar2 + -4) * 2);
|
|
|
|
}
|
|
|
|
param_3 = (int *)(uint)*puVar4;
|
|
|
|
if (*puVar4 != 0) {
|
|
|
|
iVar2 = *(int *)(_Dest + -4);
|
|
|
|
if ((*(int *)(_Dest + -0x10) == 1) && (iVar2 + 1U <= *(uint *)(_Dest + -0xc))) {
|
|
|
|
*(uint *)(_Dest + -4) = iVar2 + 1U;
|
|
|
|
*(undefined4 *)(_Dest + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar2);
|
|
|
|
wcscpy((wchar_t *)_Dest,(wchar_t *)_Dest);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(_Dest + iVar2 * 2 + -2),(wchar_t *)¶m_3,1);
|
|
|
|
*(undefined2 *)(_Dest + *(int *)(_Dest + -4) * 2 + -2) = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar2 = *piVar1;
|
|
|
|
uVar6 = *(uint *)(iVar2 + -4);
|
|
|
|
uVar7 = uVar7 + 1;
|
|
|
|
} while (uVar7 < uVar6 - 1);
|
|
|
|
}
|
|
|
|
*param_1 = _Dest;
|
|
|
|
InterlockedIncrement((LONG *)(_Dest + -0x10));
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Dest + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(_Dest + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Dest + -0x14))(1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d390 at 0x0067D390 (size: 36) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067d390(undefined4 *param_1,byte param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
*param_1 = &PTR_FUN_007ff308;
|
|
|
|
FUN_0049f850();
|
|
|
|
if ((param_2 & 1) != 0) {
|
|
|
|
operator_delete(param_1);
|
|
|
|
}
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067d3c0 at 0x0067D3C0 (size: 3452) ---
|
|
|
|
|
|
undefined4
|
|
|
|
FUN_0067d3c0(undefined **param_1,int *param_2,undefined4 param_3,wchar_t *param_4,wchar_t *param_5,
|
|
|
|
wchar_t *param_6)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
int *piVar2;
|
|
|
|
int *piVar3;
|
|
|
|
LONG LVar4;
|
|
|
|
size_t sVar5;
|
|
|
|
char *pcVar6;
|
|
|
|
int iVar7;
|
|
|
|
int *piVar8;
|
|
|
|
LONG *lpAddend;
|
|
|
|
char *pcVar9;
|
|
|
|
undefined **ppuVar10;
|
|
|
|
char cVar11;
|
|
|
|
int unaff_EBX;
|
|
|
|
undefined *puVar12;
|
|
|
|
wchar_t *pwVar13;
|
|
|
|
undefined4 *puVar14;
|
|
|
|
code *pcVar15;
|
|
|
|
bool bVar16;
|
|
|
|
undefined4 uStack_50;
|
|
|
|
undefined *local_4c;
|
|
|
|
undefined *local_48;
|
|
|
|
undefined *local_44;
|
|
|
|
undefined **ppuStack_40;
|
|
|
|
undefined **ppuStack_3c;
|
|
|
|
undefined **ppuStack_38;
|
|
|
|
wchar_t *local_34;
|
|
|
|
undefined **ppuStack_30;
|
|
|
|
undefined **ppuStack_2c;
|
|
|
|
int *local_28;
|
|
|
|
int iStack_24;
|
|
|
|
undefined **local_20;
|
|
|
|
undefined **local_1c;
|
|
|
|
int *local_18;
|
|
|
|
int local_14;
|
|
|
|
undefined **local_10;
|
|
|
|
int *local_c;
|
|
|
|
int *local_8;
|
|
|
|
int local_4;
|
|
|
|
|
|
|
|
local_20 = &PTR_FUN_007ff308;
|
|
|
|
local_10 = &PTR_FUN_007ff308;
|
|
|
|
piVar8 = (int *)param_1[3];
|
|
|
|
local_1c = (undefined **)0x0;
|
|
|
|
local_18 = (int *)0x0;
|
|
|
|
local_14 = 0;
|
|
|
|
local_c = (int *)0x0;
|
|
|
|
local_8 = (int *)0x0;
|
|
|
|
local_4 = 0;
|
|
|
|
uStack_50 = (uint)(uint3)uStack_50;
|
|
|
|
uVar1 = uStack_50;
|
|
|
|
for (; piVar3 = (int *)local_1c, piVar8 != (int *)0x0; piVar8 = (int *)piVar8[1]) {
|
|
|
|
iVar7 = *(int *)(*piVar8 + 4);
|
|
|
|
uStack_50 = uVar1;
|
|
|
|
if (iVar7 == 3) {
|
|
|
|
piVar3 = (int *)FUN_005df0f5(0xc);
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
*piVar3 = *piVar8;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
piVar3[2] = 0;
|
|
|
|
if (local_1c == (undefined **)0x0) {
|
|
|
|
local_14 = local_14 + 1;
|
|
|
|
local_1c = (undefined **)piVar3;
|
|
|
|
local_18 = piVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_18[1] = (int)piVar3;
|
|
|
|
piVar3[2] = (int)local_18;
|
|
|
|
local_14 = local_14 + 1;
|
|
|
|
local_18 = piVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (iVar7 == 4) {
|
|
|
|
piVar3 = (int *)FUN_005df0f5(0xc);
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
*piVar3 = *piVar8;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
piVar3[2] = 0;
|
|
|
|
if (local_c == (int *)0x0) {
|
|
|
|
local_4 = local_4 + 1;
|
|
|
|
local_c = piVar3;
|
|
|
|
local_8 = piVar3;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_8[1] = (int)piVar3;
|
|
|
|
piVar3[2] = (int)local_8;
|
|
|
|
local_4 = local_4 + 1;
|
|
|
|
local_8 = piVar3;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (iVar7 == 5) {
|
|
|
|
FUN_00402730(L"item");
|
|
|
|
pwVar13 = *(wchar_t **)*piVar8;
|
|
|
|
if (*(int *)(pwVar13 + -2) == *(int *)(local_34 + -2)) {
|
|
|
|
if (((*(int *)(pwVar13 + -4) == *(int *)(local_34 + -4)) || (*(int *)(pwVar13 + -4) == -1))
|
|
|
|
|| (*(int *)(local_34 + -4) == -1)) {
|
|
|
|
iVar7 = wcscmp(pwVar13,local_34);
|
|
|
|
cVar11 = '\x01' - (iVar7 != 0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar11 = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar11 = '\0';
|
|
|
|
}
|
|
|
|
pwVar13 = local_34 + -10;
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_34 + -8));
|
|
|
|
if ((LVar4 == 0) && (pwVar13 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pwVar13)(1);
|
|
|
|
}
|
|
|
|
if (cVar11 != '\0') {
|
|
|
|
uStack_50._0_3_ = (uint3)uVar1;
|
|
|
|
uStack_50 = CONCAT13(1,(uint3)uStack_50);
|
|
|
|
}
|
|
|
|
FUN_00408e40(*piVar8);
|
|
|
|
}
|
|
|
|
uVar1 = uStack_50;
|
|
|
|
}
|
|
|
|
for (; piVar3 != (int *)0x0; piVar3 = (int *)piVar3[1]) {
|
|
|
|
if ((undefined **)piVar3 != local_1c) {
|
|
|
|
piVar8 = (int *)local_1c;
|
|
|
|
do {
|
|
|
|
if (*(int *)(*piVar8 + 0x18) == *(int *)(*piVar3 + 0x18)) {
|
|
|
|
piVar2 = local_c;
|
|
|
|
if (*(int *)(*piVar3 + 0x18) != 0) {
|
|
|
|
pcVar9 = "multiple variables with the same ID; ambiguity";
|
|
|
|
do {
|
|
|
|
pcVar6 = pcVar9;
|
|
|
|
pcVar9 = pcVar6 + 1;
|
|
|
|
} while (*pcVar6 != '\0');
|
|
|
|
FUN_00401280(pcVar6 + -0x7ff3a4);
|
|
|
|
pcVar9 = "multiple variables with the same ID; ambiguity";
|
|
|
|
ppuVar10 = param_1;
|
|
|
|
do {
|
|
|
|
cVar11 = *pcVar9;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
*(char *)ppuVar10 = cVar11;
|
|
|
|
ppuVar10 = (undefined **)((int)ppuVar10 + 1);
|
|
|
|
} while (cVar11 != '\0');
|
|
|
|
DAT_008f87f8 = *(undefined4 *)(*piVar3 + 0x24);
|
|
|
|
DAT_008f87fc = 2;
|
|
|
|
if (DAT_008f8800 != param_1) {
|
|
|
|
ppuVar10 = DAT_008f8800 + -5;
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(DAT_008f8800 + -4));
|
|
|
|
if ((LVar4 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = param_1;
|
|
|
|
InterlockedIncrement((LONG *)(param_1 + -4));
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(param_1 + -4));
|
|
|
|
if ((LVar4 == 0) && (param_1 + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)param_1[-5])(1);
|
|
|
|
}
|
|
|
|
local_10 = &PTR_FUN_007ff308;
|
|
|
|
while (piVar8 = local_c, local_c != (int *)0x0) {
|
|
|
|
piVar3 = (int *)local_c[1];
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
local_8 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar3[2] = 0;
|
|
|
|
}
|
|
|
|
bVar16 = local_c != (int *)0x0;
|
|
|
|
local_c = piVar3;
|
|
|
|
if (bVar16) {
|
|
|
|
operator_delete(piVar8);
|
|
|
|
}
|
|
|
|
local_4 = local_4 + -1;
|
|
|
|
}
|
|
|
|
local_20 = &PTR_FUN_007ff308;
|
|
|
|
ppuVar10 = local_1c;
|
|
|
|
while (ppuVar10 != (undefined **)0x0) {
|
|
|
|
local_1c = (undefined **)ppuVar10[1];
|
|
|
|
if (local_1c == (undefined **)0x0) {
|
|
|
|
local_18 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_1c[2] = (undefined *)0x0;
|
|
|
|
}
|
|
|
|
if (ppuVar10 != (undefined **)0x0) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
local_14 = local_14 + -1;
|
|
|
|
ppuVar10 = local_1c;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
for (; piVar2 != (int *)0x0; piVar2 = (int *)piVar2[1]) {
|
|
|
|
if (*(int *)(*piVar2 + 0x18) == 0) {
|
|
|
|
pcVar9 = "multiple un-numbered variables; ambiguity";
|
|
|
|
do {
|
|
|
|
pcVar6 = pcVar9;
|
|
|
|
pcVar9 = pcVar6 + 1;
|
|
|
|
} while (*pcVar6 != '\0');
|
|
|
|
FUN_00401280(pcVar6 + -0x7ff3d4);
|
|
|
|
pcVar9 = "multiple un-numbered variables; ambiguity";
|
|
|
|
ppuVar10 = param_1;
|
|
|
|
do {
|
|
|
|
cVar11 = *pcVar9;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
*(char *)ppuVar10 = cVar11;
|
|
|
|
ppuVar10 = (undefined **)((int)ppuVar10 + 1);
|
|
|
|
} while (cVar11 != '\0');
|
|
|
|
DAT_008f87f8 = *(undefined4 *)(*piVar3 + 0x24);
|
|
|
|
DAT_008f87fc = 2;
|
|
|
|
if (DAT_008f8800 != param_1) {
|
|
|
|
ppuVar10 = DAT_008f8800 + -5;
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(DAT_008f8800 + -4));
|
|
|
|
if ((LVar4 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = param_1;
|
|
|
|
InterlockedIncrement((LONG *)(param_1 + -4));
|
|
|
|
}
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(param_1 + -4));
|
|
|
|
if ((LVar4 == 0) && (param_1 + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)param_1[-5])(1);
|
|
|
|
}
|
|
|
|
local_10 = &PTR_FUN_007ff308;
|
|
|
|
while (piVar8 = local_c, local_c != (int *)0x0) {
|
|
|
|
piVar3 = (int *)local_c[1];
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
local_8 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar3[2] = 0;
|
|
|
|
}
|
|
|
|
bVar16 = local_c != (int *)0x0;
|
|
|
|
local_c = piVar3;
|
|
|
|
if (bVar16) {
|
|
|
|
operator_delete(piVar8);
|
|
|
|
}
|
|
|
|
local_4 = local_4 + -1;
|
|
|
|
}
|
|
|
|
local_20 = &PTR_FUN_007ff308;
|
|
|
|
ppuVar10 = local_1c;
|
|
|
|
while (ppuVar10 != (undefined **)0x0) {
|
|
|
|
local_1c = (undefined **)ppuVar10[1];
|
|
|
|
if (local_1c == (undefined **)0x0) {
|
|
|
|
local_18 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_1c[2] = (undefined *)0x0;
|
|
|
|
}
|
|
|
|
if (ppuVar10 != (undefined **)0x0) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
local_14 = local_14 + -1;
|
|
|
|
ppuVar10 = local_1c;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
piVar8 = (int *)piVar8[1];
|
|
|
|
} while (piVar3 != piVar8);
|
|
|
|
}
|
|
|
|
if (piVar3 == (int *)0x0) break;
|
|
|
|
}
|
|
|
|
local_44 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
local_48 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
local_4c = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
pcVar15 = InterlockedDecrement_exref;
|
|
|
|
puVar12 = (undefined *)*param_2;
|
|
|
|
local_34 = (wchar_t *)0x0;
|
|
|
|
if (puVar12 != PTR_DAT_00818340) {
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(puVar12 + -0x10));
|
|
|
|
if ((LVar4 == 0) && ((undefined4 *)(puVar12 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar12 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
*param_2 = (int)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
local_28 = (int *)param_1[3];
|
|
|
|
uStack_50._3_1_ = (char)(uVar1 >> 0x18);
|
|
|
|
do {
|
|
|
|
if (local_28 == (int *)0x0) {
|
|
|
|
if (uStack_50._3_1_ != '\0') {
|
|
|
|
ppuStack_3c = (undefined **)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)((int)PTR_DAT_00818340 + -0x10));
|
|
|
|
ppuStack_38 = (undefined **)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
local_34 = (wchar_t *)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
FUN_0067cfb0(&ppuStack_3c,&ppuStack_38,&local_34);
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
piVar8 = (int *)FUN_0067d230(&ppuStack_30,&ppuStack_3c,&local_44);
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(ppuStack_30 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuStack_30 + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)ppuStack_30[-5])(1);
|
|
|
|
}
|
|
|
|
piVar8 = (int *)FUN_0067d230(&local_34,&ppuStack_3c,&local_4c);
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
}
|
|
|
|
pwVar13 = local_34 + -10;
|
|
|
|
iVar7 = (*pcVar15)(local_34 + -8);
|
|
|
|
if ((iVar7 == 0) && (pwVar13 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pwVar13)(1);
|
|
|
|
}
|
|
|
|
piVar8 = (int *)FUN_0067d230(&ppuStack_38,&ppuStack_3c,&stack0xffffffac);
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
}
|
|
|
|
ppuVar10 = ppuStack_38 + -5;
|
|
|
|
iVar7 = (*pcVar15)(ppuStack_38 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
FUN_004300a0(param_2,L"[%ls]",local_8);
|
|
|
|
piVar8 = local_8 + -5;
|
|
|
|
iVar7 = (*pcVar15)(local_8 + -4);
|
|
|
|
if ((iVar7 == 0) && (piVar8 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar8)(1);
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)(local_44 + -0x14);
|
|
|
|
iVar7 = (*pcVar15)(local_44 + -0x10);
|
|
|
|
if ((iVar7 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)(local_4c + -0x14);
|
|
|
|
iVar7 = (*pcVar15)(local_4c + -0x10);
|
|
|
|
if ((iVar7 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(unaff_EBX + -0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(unaff_EBX + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(unaff_EBX + -0x14))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)(local_4c + -0x14);
|
|
|
|
iVar7 = (*pcVar15)(local_4c + -0x10);
|
|
|
|
if ((iVar7 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)(local_4c + -0x14);
|
|
|
|
iVar7 = (*pcVar15)(local_4c + -0x10);
|
|
|
|
if ((iVar7 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)(local_4c + -0x14);
|
|
|
|
iVar7 = (*pcVar15)(local_4c + -0x10);
|
|
|
|
if ((iVar7 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
local_1c = &PTR_FUN_007ff308;
|
|
|
|
while (piVar8 = local_18, local_18 != (int *)0x0) {
|
|
|
|
piVar3 = (int *)local_18[1];
|
|
|
|
if (piVar3 == (int *)0x0) {
|
|
|
|
local_14 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar3[2] = 0;
|
|
|
|
}
|
|
|
|
bVar16 = local_18 != (int *)0x0;
|
|
|
|
local_18 = piVar3;
|
|
|
|
if (bVar16) {
|
|
|
|
operator_delete(piVar8);
|
|
|
|
}
|
|
|
|
local_10 = (undefined **)((int)local_10 + -1);
|
|
|
|
}
|
|
|
|
ppuStack_2c = &PTR_FUN_007ff308;
|
|
|
|
piVar8 = local_28;
|
|
|
|
while (piVar8 != (int *)0x0) {
|
|
|
|
local_28 = (int *)piVar8[1];
|
|
|
|
if (local_28 == (int *)0x0) {
|
|
|
|
iStack_24 = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_28[2] = 0;
|
|
|
|
}
|
|
|
|
if (piVar8 != (int *)0x0) {
|
|
|
|
operator_delete(piVar8);
|
|
|
|
}
|
|
|
|
local_20 = (undefined **)((int)local_20 + -1);
|
|
|
|
piVar8 = local_28;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
piVar8 = (int *)*local_28;
|
|
|
|
switch(piVar8[1]) {
|
|
|
|
case 2:
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (-1 < piVar8[6]) {
|
|
|
|
if (uStack_50._3_1_ != '\0') {
|
|
|
|
if (local_34 == param_4) {
|
|
|
|
if (local_44 != (undefined *)piVar8[8]) {
|
|
|
|
puVar14 = (undefined4 *)(local_44 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_44 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar12 = (undefined *)piVar8[8];
|
|
|
|
local_44 = puVar12;
|
|
|
|
goto LAB_0067d978;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (local_34 == param_5) {
|
|
|
|
if (local_48 != (undefined *)piVar8[8]) {
|
|
|
|
puVar14 = (undefined4 *)(local_48 + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_48 + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar12 = (undefined *)piVar8[8];
|
|
|
|
local_48 = puVar12;
|
|
|
|
LAB_0067d978:
|
|
|
|
InterlockedIncrement((LONG *)(puVar12 + -0x10));
|
|
|
|
pcVar15 = InterlockedDecrement_exref;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ((local_34 == param_6) && (local_4c != (undefined *)piVar8[8])) {
|
|
|
|
puVar14 = (undefined4 *)(local_4c + -0x14);
|
|
|
|
LVar4 = InterlockedDecrement((LONG *)(local_4c + -0x10));
|
|
|
|
if ((LVar4 == 0) && (puVar14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar14)(1);
|
|
|
|
}
|
|
|
|
puVar12 = (undefined *)piVar8[8];
|
|
|
|
local_4c = puVar12;
|
|
|
|
goto LAB_0067d978;
|
|
|
|
}
|
|
|
|
local_34 = (wchar_t *)((int)local_34 + 1);
|
|
|
|
}
|
|
|
|
puVar14 = (undefined4 *)*local_28;
|
|
|
|
if (*(char *)(puVar14 + 7) == '\0') {
|
|
|
|
pwVar13 = (wchar_t *)*puVar14;
|
|
|
|
if ((pwVar13 == (wchar_t *)0x0) || (*pwVar13 == L'\0')) {
|
|
|
|
param_1 = (undefined **)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sVar5 = wcslen(pwVar13);
|
|
|
|
FUN_004022d0(sVar5);
|
|
|
|
wcscpy((wchar_t *)param_1,pwVar13);
|
|
|
|
}
|
|
|
|
ppuVar10 = param_1;
|
|
|
|
if (param_1[-1] != (undefined *)0x1) {
|
|
|
|
FUN_00402490(param_1,param_1[-1] + -1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar8 = (int *)FUN_0067c9f0(&ppuStack_30,puVar14);
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
ppuVar10 = ppuStack_30;
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
ppuVar10 = ppuStack_30;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(ppuVar10 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuVar10 + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)ppuVar10[-5])(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
if (local_1c != (undefined **)0x0) {
|
|
|
|
piVar3 = (int *)local_1c;
|
|
|
|
do {
|
|
|
|
if (*(int *)(*piVar3 + 0x18) == piVar8[6]) {
|
|
|
|
piVar8 = (int *)FUN_0067d1e0(*piVar3,piVar8);
|
|
|
|
pcVar15 = InterlockedDecrement_exref;
|
|
|
|
if (piVar8 != (int *)0x0) {
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
pcVar15 = InterlockedDecrement_exref;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
goto switchD_0067d644_caseD_5;
|
|
|
|
}
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
pcVar15 = InterlockedDecrement_exref;
|
|
|
|
} while (piVar3 != (int *)0x0);
|
|
|
|
}
|
|
|
|
piVar3 = (int *)local_1c;
|
|
|
|
if (piVar8[6] != 0) {
|
|
|
|
LAB_0067da86:
|
|
|
|
if (*(int *)(*local_28 + 0x18) == 0) {
|
|
|
|
pcVar9 = "no default variable exists to match with this default choice block";
|
|
|
|
do {
|
|
|
|
pcVar6 = pcVar9;
|
|
|
|
pcVar9 = pcVar6 + 1;
|
|
|
|
} while (*pcVar6 != '\0');
|
|
|
|
FUN_00401280(pcVar6 + -0x7ff360);
|
|
|
|
pcVar9 = "no default variable exists to match with this default choice block";
|
|
|
|
ppuVar10 = ppuStack_40;
|
|
|
|
do {
|
|
|
|
cVar11 = *pcVar9;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
*(char *)ppuVar10 = cVar11;
|
|
|
|
ppuVar10 = (undefined **)((int)ppuVar10 + 1);
|
|
|
|
} while (cVar11 != '\0');
|
|
|
|
DAT_008f87f8 = *(undefined4 *)(*local_28 + 0x24);
|
|
|
|
DAT_008f87fc = 1;
|
|
|
|
ppuStack_3c = ppuStack_40;
|
|
|
|
if (DAT_008f8800 != ppuStack_40) {
|
|
|
|
ppuVar10 = DAT_008f8800 + -5;
|
|
|
|
iVar7 = (*pcVar15)(DAT_008f8800 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = ppuStack_40;
|
|
|
|
InterlockedIncrement((LONG *)(ppuStack_40 + -4));
|
|
|
|
ppuStack_3c = ppuStack_40;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pcVar9 = "no variable has the same ID as this choice block";
|
|
|
|
do {
|
|
|
|
pcVar6 = pcVar9;
|
|
|
|
pcVar9 = pcVar6 + 1;
|
|
|
|
} while (*pcVar6 != '\0');
|
|
|
|
FUN_00401280(pcVar6 + -0x7ff32c);
|
|
|
|
pcVar9 = "no variable has the same ID as this choice block";
|
|
|
|
ppuVar10 = ppuStack_3c;
|
|
|
|
do {
|
|
|
|
cVar11 = *pcVar9;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
*(char *)ppuVar10 = cVar11;
|
|
|
|
ppuVar10 = (undefined **)((int)ppuVar10 + 1);
|
|
|
|
} while (cVar11 != '\0');
|
|
|
|
DAT_008f87f8 = *(undefined4 *)(*local_28 + 0x24);
|
|
|
|
DAT_008f87fc = 1;
|
|
|
|
if (DAT_008f8800 != ppuStack_3c) {
|
|
|
|
ppuVar10 = DAT_008f8800 + -5;
|
|
|
|
iVar7 = (*pcVar15)(DAT_008f8800 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = ppuStack_3c;
|
|
|
|
InterlockedIncrement((LONG *)(ppuStack_3c + -4));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(ppuStack_3c + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuStack_3c + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)ppuStack_3c[-5])(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
local_20 = &PTR_FUN_007ff308;
|
|
|
|
while (ppuVar10 = local_1c, local_1c != (undefined **)0x0) {
|
|
|
|
piVar8 = (int *)local_1c[1];
|
|
|
|
if (piVar8 == (int *)0x0) {
|
|
|
|
local_18 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar8[2] = 0;
|
|
|
|
}
|
|
|
|
bVar16 = local_1c != (undefined **)0x0;
|
|
|
|
local_1c = (undefined **)piVar8;
|
|
|
|
if (bVar16) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
local_14 = local_14 + -1;
|
|
|
|
}
|
|
|
|
ppuStack_30 = &PTR_FUN_007ff308;
|
|
|
|
ppuVar10 = ppuStack_2c;
|
|
|
|
while (ppuVar10 != (void *)0x0) {
|
|
|
|
ppuStack_2c = *(undefined ***)((int)ppuVar10 + 4);
|
|
|
|
if (ppuStack_2c == (void *)0x0) {
|
|
|
|
local_28 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 *)((int)ppuStack_2c + 8) = 0;
|
|
|
|
}
|
|
|
|
if (ppuVar10 != (void *)0x0) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
iStack_24 = iStack_24 + -1;
|
|
|
|
ppuVar10 = ppuStack_2c;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
while( true ) {
|
|
|
|
if (piVar3 == (int *)0x0) goto LAB_0067da86;
|
|
|
|
if (*(int *)(*piVar3 + 0x18) == -1) break;
|
|
|
|
piVar3 = (int *)piVar3[1];
|
|
|
|
}
|
|
|
|
piVar8 = (int *)FUN_0067d1e0(*piVar3,piVar8);
|
|
|
|
if (piVar8 != (int *)0x0) {
|
|
|
|
iVar7 = *(int *)(*piVar8 + -4);
|
|
|
|
if (iVar7 != 1) {
|
|
|
|
FUN_00402490(*piVar8,iVar7 + -1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
pcVar9 = "unknown node type";
|
|
|
|
do {
|
|
|
|
pcVar6 = pcVar9;
|
|
|
|
pcVar9 = pcVar6 + 1;
|
|
|
|
} while (*pcVar6 != '\0');
|
|
|
|
FUN_00401280(pcVar6 + -0x7ff318);
|
|
|
|
pcVar9 = "unknown node type";
|
|
|
|
ppuVar10 = ppuStack_38;
|
|
|
|
do {
|
|
|
|
cVar11 = *pcVar9;
|
|
|
|
pcVar9 = pcVar9 + 1;
|
|
|
|
*(char *)ppuVar10 = cVar11;
|
|
|
|
ppuVar10 = (undefined **)((int)ppuVar10 + 1);
|
|
|
|
} while (cVar11 != '\0');
|
|
|
|
DAT_008f87f8 = *(undefined4 *)(*local_28 + 0x24);
|
|
|
|
DAT_008f87fc = 4;
|
|
|
|
if (DAT_008f8800 != ppuStack_38) {
|
|
|
|
ppuVar10 = DAT_008f8800 + -5;
|
|
|
|
iVar7 = (*pcVar15)(DAT_008f8800 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuVar10 != (undefined **)0x0)) {
|
|
|
|
(**(code **)*ppuVar10)(1);
|
|
|
|
}
|
|
|
|
DAT_008f8800 = ppuStack_38;
|
|
|
|
InterlockedIncrement((LONG *)(ppuStack_38 + -4));
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(ppuStack_38 + -4);
|
|
|
|
if ((iVar7 == 0) && (ppuStack_38 + -5 != (undefined **)0x0)) {
|
|
|
|
(**(code **)ppuStack_38[-5])(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
iVar7 = (*pcVar15)(uVar1 - 0x10);
|
|
|
|
if ((iVar7 == 0) && ((undefined4 *)(uVar1 - 0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(uVar1 - 0x14))(1);
|
|
|
|
}
|
|
|
|
local_20 = &PTR_FUN_007ff308;
|
|
|
|
while (ppuVar10 = local_1c, local_1c != (undefined **)0x0) {
|
|
|
|
piVar8 = (int *)local_1c[1];
|
|
|
|
if (piVar8 == (int *)0x0) {
|
|
|
|
local_18 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar8[2] = 0;
|
|
|
|
}
|
|
|
|
bVar16 = local_1c != (undefined **)0x0;
|
|
|
|
local_1c = (undefined **)piVar8;
|
|
|
|
if (bVar16) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
local_14 = local_14 + -1;
|
|
|
|
}
|
|
|
|
ppuStack_30 = &PTR_FUN_007ff308;
|
|
|
|
ppuVar10 = ppuStack_2c;
|
|
|
|
while (ppuVar10 != (void *)0x0) {
|
|
|
|
ppuStack_2c = *(undefined ***)((int)ppuVar10 + 4);
|
|
|
|
if (ppuStack_2c == (void *)0x0) {
|
|
|
|
local_28 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 *)((int)ppuStack_2c + 8) = 0;
|
|
|
|
}
|
|
|
|
if (ppuVar10 != (void *)0x0) {
|
|
|
|
operator_delete(ppuVar10);
|
|
|
|
}
|
|
|
|
iStack_24 = iStack_24 + -1;
|
|
|
|
ppuVar10 = ppuStack_2c;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
switchD_0067d644_caseD_5:
|
|
|
|
local_28 = (int *)local_28[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e150 at 0x0067E150 (size: 1338) ---
|
|
|
|
|
|
bool FUN_0067e150(undefined4 param_1,undefined4 param_2,int *param_3,undefined4 param_4,
|
|
|
|
undefined4 param_5,byte param_6,undefined4 *param_7)
|
|
|
|
|
|
|
|
{
|
|
|
|
wchar_t *pwVar1;
|
|
|
|
bool bVar2;
|
|
|
|
undefined4 uVar3;
|
|
|
|
undefined4 *puVar4;
|
|
|
|
char cVar5;
|
|
|
|
size_t sVar6;
|
|
|
|
LONG LVar7;
|
|
|
|
int *piVar8;
|
|
|
|
int iVar9;
|
|
|
|
undefined4 uVar10;
|
|
|
|
code *pcVar11;
|
|
|
|
int *piVar12;
|
|
|
|
int iVar13;
|
|
|
|
uint local_2c;
|
|
|
|
uint local_28;
|
|
|
|
uint local_24;
|
|
|
|
wchar_t *local_20;
|
|
|
|
wchar_t *pwStack_1c;
|
|
|
|
wchar_t *pwStack_18;
|
|
|
|
wchar_t *pwStack_14;
|
|
|
|
uint local_10;
|
|
|
|
int iStack_c;
|
|
|
|
uint uStack_8;
|
|
|
|
undefined4 uStack_4;
|
|
|
|
|
|
|
|
DAT_008f87f8 = 0xffffffff;
|
|
|
|
DAT_008f87fc = 0;
|
|
|
|
FUN_00405000(&DAT_007938af);
|
|
|
|
piVar12 = param_3;
|
|
|
|
local_24 = 0xffffffff;
|
|
|
|
local_10 = 0xffffffff;
|
|
|
|
local_28 = 0xffffffff;
|
|
|
|
local_2c = 0;
|
|
|
|
if (param_3[2] != 0) {
|
|
|
|
do {
|
|
|
|
sVar6 = wcslen(L"PRE");
|
|
|
|
FUN_004022d0(sVar6);
|
|
|
|
wcscpy(local_20,L"PRE");
|
|
|
|
iVar13 = local_2c * 4;
|
|
|
|
pwVar1 = *(wchar_t **)(*piVar12 + iVar13);
|
|
|
|
if (*(int *)(pwVar1 + -2) == *(int *)(local_20 + -2)) {
|
|
|
|
if (((*(int *)(pwVar1 + -4) == *(int *)(local_20 + -4)) || (*(int *)(pwVar1 + -4) == -1)) ||
|
|
|
|
(*(int *)(local_20 + -4) == -1)) {
|
|
|
|
iVar9 = wcscmp(pwVar1,local_20);
|
|
|
|
cVar5 = '\x01' - (iVar9 != 0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(local_20 + -8));
|
|
|
|
if ((LVar7 == 0) && (local_20 + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(local_20 + -10))(1);
|
|
|
|
}
|
|
|
|
if (cVar5 == '\0') {
|
|
|
|
sVar6 = wcslen(L"MID");
|
|
|
|
FUN_004022d0(sVar6);
|
|
|
|
wcscpy(pwStack_18,L"MID");
|
|
|
|
pwVar1 = *(wchar_t **)(*piVar12 + iVar13);
|
|
|
|
if (*(int *)(pwVar1 + -2) == *(int *)(pwStack_18 + -2)) {
|
|
|
|
if (((*(int *)(pwVar1 + -4) != *(int *)(pwStack_18 + -4)) && (*(int *)(pwVar1 + -4) != -1)
|
|
|
|
) && (*(int *)(pwStack_18 + -4) != -1)) goto LAB_0067e2ad;
|
|
|
|
iVar9 = wcscmp(pwVar1,pwStack_18);
|
|
|
|
cVar5 = '\x01' - (iVar9 != 0);
|
|
|
|
param_3 = (int *)CONCAT31(param_3._1_3_,cVar5);
|
|
|
|
if (cVar5 == '\0') goto LAB_0067e2ad;
|
|
|
|
LAB_0067e33d:
|
|
|
|
bVar2 = true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
LAB_0067e2ad:
|
|
|
|
sVar6 = wcslen(L"NAME");
|
|
|
|
FUN_004022d0(sVar6);
|
|
|
|
wcscpy(pwStack_1c,L"NAME");
|
|
|
|
pwVar1 = *(wchar_t **)(*piVar12 + iVar13);
|
|
|
|
if (*(int *)(pwVar1 + -2) == *(int *)(pwStack_1c + -2)) {
|
|
|
|
if (((*(int *)(pwVar1 + -4) == *(int *)(pwStack_1c + -4)) ||
|
|
|
|
(*(int *)(pwVar1 + -4) == -1)) || (*(int *)(pwStack_1c + -4) == -1)) {
|
|
|
|
iVar9 = wcscmp(pwVar1,pwStack_1c);
|
|
|
|
cVar5 = '\x01' - (iVar9 != 0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(pwStack_1c + -8));
|
|
|
|
if ((LVar7 == 0) && (pwStack_1c + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pwStack_1c + -10))(1);
|
|
|
|
}
|
|
|
|
bVar2 = false;
|
|
|
|
if (cVar5 != '\0') goto LAB_0067e33d;
|
|
|
|
}
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(pwStack_18 + -8));
|
|
|
|
if ((LVar7 == 0) && (pwStack_18 + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pwStack_18 + -10))(1);
|
|
|
|
}
|
|
|
|
if (bVar2) {
|
|
|
|
local_10 = local_2c;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
sVar6 = wcslen(L"POST");
|
|
|
|
FUN_004022d0(sVar6);
|
|
|
|
wcscpy(pwStack_14,L"POST");
|
|
|
|
pwVar1 = *(wchar_t **)(*piVar12 + iVar13);
|
|
|
|
if (*(int *)(pwVar1 + -2) == *(int *)(pwStack_14 + -2)) {
|
|
|
|
if (((*(int *)(pwVar1 + -4) == *(int *)(pwStack_14 + -4)) ||
|
|
|
|
(*(int *)(pwVar1 + -4) == -1)) || (*(int *)(pwStack_14 + -4) == -1)) {
|
|
|
|
iVar13 = wcscmp(pwVar1,pwStack_14);
|
|
|
|
cVar5 = '\x01' - (iVar13 != 0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
cVar5 = '\0';
|
|
|
|
}
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(pwStack_14 + -8));
|
|
|
|
if ((LVar7 == 0) && (pwStack_14 + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pwStack_14 + -10))(1);
|
|
|
|
}
|
|
|
|
if (cVar5 != '\0') {
|
|
|
|
local_28 = local_2c;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_24 = local_2c;
|
|
|
|
}
|
|
|
|
local_2c = local_2c + 1;
|
|
|
|
} while (local_2c < (uint)piVar12[2]);
|
|
|
|
if ((local_10 != 0xffffffff) && ((local_24 != 0xffffffff || (local_28 != 0xffffffff)))) {
|
|
|
|
iStack_c = 0;
|
|
|
|
uStack_8 = 0;
|
|
|
|
uStack_4 = 0;
|
|
|
|
FUN_0042d3b0(param_2);
|
|
|
|
pcVar11 = InterlockedDecrement_exref;
|
|
|
|
if (local_24 != 0xffffffff) {
|
|
|
|
piVar12 = (int *)(iStack_c + local_24 * 4);
|
|
|
|
piVar8 = (int *)FUN_0067cdc0(¶m_3,piVar12);
|
|
|
|
pcVar11 = InterlockedDecrement_exref;
|
|
|
|
iVar13 = *piVar12;
|
|
|
|
if (iVar13 != *piVar8) {
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(iVar13 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(iVar13 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar13 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar13 = *piVar8;
|
|
|
|
*piVar12 = iVar13;
|
|
|
|
InterlockedIncrement((LONG *)(iVar13 + -0x10));
|
|
|
|
}
|
|
|
|
piVar12 = param_3 + -5;
|
|
|
|
LVar7 = InterlockedDecrement(param_3 + -4);
|
|
|
|
if ((LVar7 == 0) && (piVar12 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar12)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (local_28 != 0xffffffff) {
|
|
|
|
piVar12 = (int *)(iStack_c + local_28 * 4);
|
|
|
|
piVar8 = (int *)FUN_0067cdc0(¶m_3,piVar12);
|
|
|
|
iVar13 = *piVar12;
|
|
|
|
if (iVar13 != *piVar8) {
|
|
|
|
iVar9 = (*pcVar11)(iVar13 + -0x10);
|
|
|
|
if ((iVar9 == 0) && ((undefined4 *)(iVar13 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar13 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar13 = *piVar8;
|
|
|
|
*piVar12 = iVar13;
|
|
|
|
InterlockedIncrement((LONG *)(iVar13 + -0x10));
|
|
|
|
}
|
|
|
|
piVar12 = param_3 + -5;
|
|
|
|
iVar13 = (*pcVar11)(param_3 + -4);
|
|
|
|
if ((iVar13 == 0) && (piVar12 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar12)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00680020(param_1,&iStack_c);
|
|
|
|
if (((uStack_8 & 0x80000000) == 0x80000000) && (iStack_c != 0)) {
|
|
|
|
FUN_00407920(3);
|
|
|
|
}
|
|
|
|
goto LAB_0067e58a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_00680020(param_1,param_2);
|
|
|
|
pcVar11 = InterlockedDecrement_exref;
|
|
|
|
LAB_0067e58a:
|
|
|
|
FUN_0067e9b0();
|
|
|
|
FUN_0067efe0();
|
|
|
|
uVar3 = param_4;
|
|
|
|
if (DAT_008f87fc == 0) {
|
|
|
|
uVar10 = FUN_0067e690(param_4,param_5,local_24,local_10,local_28);
|
|
|
|
FUN_0067d3c0(uVar10);
|
|
|
|
if ((DAT_008f87fc == 0) && ((param_6 & 1) != 0)) {
|
|
|
|
FUN_00402730(L"keepspaces");
|
|
|
|
iVar13 = FUN_0067d010(¶m_3);
|
|
|
|
piVar12 = param_3 + -5;
|
|
|
|
iVar9 = (*pcVar11)(param_3 + -4);
|
|
|
|
if ((iVar9 == 0) && (piVar12 != (int *)0x0)) {
|
|
|
|
(**(code **)*piVar12)(1);
|
|
|
|
}
|
|
|
|
if (iVar13 == -1) {
|
|
|
|
FUN_0067c9b0(uVar3);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
puVar4 = param_7;
|
|
|
|
if (param_7 != (undefined4 *)0x0) {
|
|
|
|
*param_7 = DAT_008f87f8;
|
|
|
|
param_7[1] = DAT_008f87fc;
|
|
|
|
iVar13 = param_7[2];
|
|
|
|
if (iVar13 != DAT_008f8800) {
|
|
|
|
iVar9 = (*pcVar11)(iVar13 + -0x10);
|
|
|
|
if ((iVar9 == 0) && ((undefined4 *)(iVar13 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar13 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar13 = DAT_008f8800;
|
|
|
|
puVar4[2] = DAT_008f8800;
|
|
|
|
InterlockedIncrement((LONG *)(iVar13 + -0x10));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0067e9f0();
|
|
|
|
return DAT_008f87fc == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e690 at 0x0067E690 (size: 6) ---
|
|
|
|
|
|
undefined4 FUN_0067e690(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return DAT_008f881c;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e6a0 at 0x0067E6A0 (size: 24) ---
|
|
|
|
|
|
undefined4 FUN_0067e6a0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
if ((DAT_008f8818 != 0) && (*(int *)(DAT_008f8818 + 4) == 4)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e6c0 at 0x0067E6C0 (size: 68) ---
|
|
|
|
|
|
void __thiscall FUN_0067e6c0(int param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
puVar2 = (undefined4 *)FUN_005df0f5(0xc);
|
|
|
|
if (puVar2 != (undefined4 *)0x0) {
|
|
|
|
*puVar2 = param_2;
|
|
|
|
puVar2[1] = 0;
|
|
|
|
puVar2[2] = 0;
|
|
|
|
if (*(int *)(param_1 + 0xc) == 0) {
|
|
|
|
*(undefined4 **)(param_1 + 0xc) = puVar2;
|
|
|
|
*(undefined4 **)(param_1 + 0x10) = puVar2;
|
|
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(param_1 + 0x10);
|
|
|
|
*(undefined4 **)(iVar1 + 4) = puVar2;
|
|
|
|
puVar2[2] = iVar1;
|
|
|
|
*(undefined4 **)(param_1 + 0x10) = puVar2;
|
|
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) + 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e710 at 0x0067E710 (size: 142) ---
|
|
|
|
|
|
void FUN_0067e710(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int iVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
iVar2 = FUN_0067f620();
|
|
|
|
*(int *)(param_1 + 0x24) = iVar2 + -1;
|
|
|
|
iVar2 = DAT_008f881c;
|
|
|
|
DAT_008f8820 = param_1;
|
|
|
|
if (DAT_008f8818 == 0) {
|
|
|
|
piVar3 = (int *)FUN_005df0f5(0xc);
|
|
|
|
if (piVar3 != (int *)0x0) {
|
|
|
|
*piVar3 = param_1;
|
|
|
|
piVar3[1] = 0;
|
|
|
|
piVar3[2] = 0;
|
|
|
|
if (*(int *)(iVar2 + 0xc) == 0) {
|
|
|
|
*(int **)(iVar2 + 0xc) = piVar3;
|
|
|
|
*(int **)(iVar2 + 0x10) = piVar3;
|
|
|
|
*(int *)(iVar2 + 0x14) = *(int *)(iVar2 + 0x14) + 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(iVar2 + 0x10);
|
|
|
|
*(int **)(iVar1 + 4) = piVar3;
|
|
|
|
piVar3[2] = iVar1;
|
|
|
|
*(int **)(iVar2 + 0x10) = piVar3;
|
|
|
|
*(int *)(iVar2 + 0x14) = *(int *)(iVar2 + 0x14) + 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (param_1 == DAT_008f8818) {
|
|
|
|
FUN_0067e6c0(param_1);
|
|
|
|
DAT_008f8818 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FUN_0067e6c0(param_1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e7a0 at 0x0067E7A0 (size: 72) ---
|
|
|
|
|
|
void FUN_0067e7a0(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
LONG LVar2;
|
|
|
|
int *piVar3;
|
|
|
|
|
|
|
|
iVar1 = *(int *)(DAT_008f8820 + 0x20);
|
|
|
|
piVar3 = (int *)(DAT_008f8820 + 0x20);
|
|
|
|
if (iVar1 != *param_1) {
|
|
|
|
LVar2 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar2 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*piVar3 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e7f0 at 0x0067E7F0 (size: 116) ---
|
|
|
|
|
|
uint FUN_0067e7f0(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int *piVar1;
|
|
|
|
bool bVar2;
|
|
|
|
undefined3 uVar4;
|
|
|
|
uint uVar3;
|
|
|
|
undefined4 *puVar5;
|
|
|
|
|
|
|
|
piVar1 = *(int **)(param_1 + 0xc);
|
|
|
|
uVar3 = param_1 & 0xffffff00;
|
|
|
|
bVar2 = false;
|
|
|
|
do {
|
|
|
|
uVar4 = (undefined3)(uVar3 >> 8);
|
|
|
|
if (piVar1 == (int *)0x0) {
|
|
|
|
return CONCAT31(uVar4,1);
|
|
|
|
}
|
|
|
|
if (*(int *)(*(int *)(*piVar1 + 0x20) + -4) == 1) {
|
|
|
|
if (bVar2) {
|
|
|
|
FUN_00401340("multiple default choices in this block");
|
|
|
|
FUN_0067d180(*(undefined4 *)(*piVar1 + 0x24),3,¶m_1);
|
|
|
|
puVar5 = (undefined4 *)(param_1 - 0x14);
|
|
|
|
uVar3 = InterlockedDecrement((LONG *)(param_1 - 0x10));
|
|
|
|
if ((uVar3 == 0) && (puVar5 != (undefined4 *)0x0)) {
|
|
|
|
uVar3 = (**(code **)*puVar5)(1);
|
|
|
|
}
|
|
|
|
return uVar3 & 0xffffff00;
|
|
|
|
}
|
|
|
|
uVar3 = CONCAT31(uVar4,1);
|
|
|
|
bVar2 = true;
|
|
|
|
}
|
|
|
|
piVar1 = (int *)piVar1[1];
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e870 at 0x0067E870 (size: 95) ---
|
|
|
|
|
|
void __fastcall FUN_0067e870(int param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined4 *puVar1;
|
|
|
|
void *pvVar2;
|
|
|
|
int iVar3;
|
|
|
|
|
|
|
|
*(undefined4 *)(param_1 + 4) = 0;
|
|
|
|
for (puVar1 = *(undefined4 **)(param_1 + 0xc); puVar1 != (undefined4 *)0x0;
|
|
|
|
puVar1 = (undefined4 *)puVar1[1]) {
|
|
|
|
pvVar2 = (void *)*puVar1;
|
|
|
|
if (pvVar2 != (void *)0x0) {
|
|
|
|
FUN_0067e950();
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
while (pvVar2 = *(void **)(param_1 + 0xc), pvVar2 != (void *)0x0) {
|
|
|
|
iVar3 = *(int *)((int)pvVar2 + 4);
|
|
|
|
*(int *)(param_1 + 0xc) = iVar3;
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
*(undefined4 *)(param_1 + 0x10) = 0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*(undefined4 *)(iVar3 + 8) = 0;
|
|
|
|
}
|
|
|
|
if (pvVar2 != (void *)0x0) {
|
|
|
|
operator_delete(pvVar2);
|
|
|
|
}
|
|
|
|
*(int *)(param_1 + 0x14) = *(int *)(param_1 + 0x14) + -1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e8d0 at 0x0067E8D0 (size: 27) ---
|
|
|
|
|
|
void FUN_0067e8d0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
FUN_0067e7f0(DAT_008f8818);
|
|
|
|
FUN_0067e710(DAT_008f8818);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e8f0 at 0x0067E8F0 (size: 84) ---
|
|
|
|
|
|
undefined4 * __thiscall FUN_0067e8f0(undefined4 *param_1,undefined4 param_2)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG *pLVar1;
|
|
|
|
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
*param_1 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[1] = param_2;
|
|
|
|
param_1[2] = &PTR_FUN_007ff308;
|
|
|
|
param_1[3] = 0;
|
|
|
|
param_1[4] = 0;
|
|
|
|
param_1[5] = 0;
|
|
|
|
param_1[6] = 0;
|
|
|
|
*(undefined1 *)(param_1 + 7) = 0;
|
|
|
|
pLVar1 = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
param_1[8] = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(pLVar1);
|
|
|
|
param_1[9] = 0;
|
|
|
|
return param_1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e950 at 0x0067E950 (size: 89) ---
|
|
|
|
|
|
void __fastcall FUN_0067e950(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
|
|
|
|
FUN_0067e870();
|
|
|
|
puVar2 = (undefined4 *)(param_1[8] + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(param_1[8] + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
param_1[2] = (int)&PTR_FUN_007ff308;
|
|
|
|
FUN_0049f850();
|
|
|
|
puVar2 = (undefined4 *)(*param_1 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(*param_1 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e9b0 at 0x0067E9B0 (size: 59) ---
|
|
|
|
|
|
void FUN_0067e9b0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
DAT_008f8820 = 0;
|
|
|
|
DAT_008f8818 = 0;
|
|
|
|
DAT_008f881c = 0;
|
|
|
|
iVar1 = FUN_005df0f5(0x28);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
DAT_008f881c = FUN_0067e8f0(1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
DAT_008f881c = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067e9f0 at 0x0067E9F0 (size: 77) ---
|
|
|
|
|
|
void FUN_0067e9f0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
void *pvVar1;
|
|
|
|
|
|
|
|
pvVar1 = DAT_008f881c;
|
|
|
|
if (DAT_008f881c != (void *)0x0) {
|
|
|
|
FUN_0067e950();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
pvVar1 = DAT_008f8818;
|
|
|
|
DAT_008f881c = (void *)0x0;
|
|
|
|
if (DAT_008f8818 != (void *)0x0) {
|
|
|
|
FUN_0067e950();
|
|
|
|
operator_delete(pvVar1);
|
|
|
|
}
|
|
|
|
DAT_008f8818 = (void *)0x0;
|
|
|
|
DAT_008f8820 = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067ea40 at 0x0067EA40 (size: 98) ---
|
|
|
|
|
|
void FUN_0067ea40(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
iVar1 = FUN_005df0f5(0x28);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar2 = (int *)FUN_0067e8f0(2);
|
|
|
|
}
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
if (iVar1 != *param_1) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*piVar2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
FUN_0067e710(piVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067eab0 at 0x0067EAB0 (size: 1140) ---
|
|
|
|
|
|
void FUN_0067eab0(wchar_t *param_1,undefined *param_2,wchar_t *param_3)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
wchar_t wVar2;
|
|
|
|
int iVar3;
|
|
|
|
int *piVar4;
|
|
|
|
wchar_t *pwVar5;
|
|
|
|
undefined4 uVar6;
|
|
|
|
LONG LVar7;
|
|
|
|
size_t sVar8;
|
|
|
|
int *piVar9;
|
|
|
|
long lVar10;
|
|
|
|
wchar_t *pwVar11;
|
|
|
|
undefined4 *puVar12;
|
|
|
|
wchar_t *pwVar13;
|
|
|
|
code *pcVar14;
|
|
|
|
wchar_t *pwStack_10;
|
|
|
|
int local_c;
|
|
|
|
int iStack_8;
|
|
|
|
wchar_t *local_4;
|
|
|
|
|
|
|
|
iVar3 = FUN_005df0f5(0x28);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
piVar4 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar4 = (int *)FUN_0067e8f0(3);
|
|
|
|
}
|
|
|
|
pwVar13 = param_1;
|
|
|
|
piVar4[6] = (int)param_2;
|
|
|
|
*(undefined1 *)(piVar4 + 7) = param_3._0_1_;
|
|
|
|
pwVar5 = (wchar_t *)FUN_0040b340(*(int *)param_1,0x5b,0x5c);
|
|
|
|
param_3 = pwVar5;
|
|
|
|
if (pwVar5 == (wchar_t *)0x0) {
|
|
|
|
iVar3 = *piVar4;
|
|
|
|
if (iVar3 != *(int *)pwVar13) {
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(iVar3 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(iVar3 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar3 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar3 = *(int *)pwVar13;
|
|
|
|
*piVar4 = iVar3;
|
|
|
|
InterlockedIncrement((LONG *)(iVar3 + -0x10));
|
|
|
|
}
|
|
|
|
param_3 = (wchar_t *)0x0;
|
|
|
|
lVar10 = wcstol(*(wchar_t **)pwVar13,¶m_3,10);
|
|
|
|
if (((param_3 != (wchar_t *)0x0) && (*param_3 == L'\0')) &&
|
|
|
|
(cVar1 = FUN_0067c7c0(lVar10), cVar1 != '\0')) {
|
|
|
|
param_1 = (wchar_t *)0x31;
|
|
|
|
FUN_00402490(¶m_1,1);
|
|
|
|
}
|
|
|
|
if (*(int *)(*(int *)pwVar13 + -4) == 1) {
|
|
|
|
param_1 = (wchar_t *)0x62;
|
|
|
|
FUN_00402490(¶m_1,1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar11 = *(wchar_t **)pwVar13;
|
|
|
|
if (pwVar11 != pwVar5) {
|
|
|
|
do {
|
|
|
|
param_2 = (undefined *)(uint)(ushort)*pwVar11;
|
|
|
|
if (*pwVar11 != L'\0') {
|
|
|
|
pwVar13 = (wchar_t *)*piVar4;
|
|
|
|
iVar3 = *(int *)(pwVar13 + -2);
|
|
|
|
if ((*(int *)(pwVar13 + -8) == 1) && (iVar3 + 1U <= *(uint *)(pwVar13 + -6))) {
|
|
|
|
*(uint *)(pwVar13 + -2) = iVar3 + 1U;
|
|
|
|
*(undefined4 *)(*piVar4 + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar3);
|
|
|
|
wcscpy((wchar_t *)*piVar4,pwVar13);
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(pwVar13 + -8));
|
|
|
|
if ((LVar7 == 0) && (pwVar13 + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pwVar13 + -10))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(*piVar4 + -2 + iVar3 * 2),(wchar_t *)¶m_2,1);
|
|
|
|
*(undefined2 *)(*piVar4 + -2 + *(int *)(*piVar4 + -4) * 2) = 0;
|
|
|
|
pwVar5 = param_3;
|
|
|
|
pwVar13 = param_1;
|
|
|
|
}
|
|
|
|
pwVar11 = pwVar11 + 1;
|
|
|
|
} while (pwVar11 != pwVar5);
|
|
|
|
}
|
|
|
|
iVar3 = DAT_00837750;
|
|
|
|
InterlockedIncrement((LONG *)(DAT_00837750 + -0x10));
|
|
|
|
FUN_004d68c0(0,1,iVar3);
|
|
|
|
pwVar5 = pwVar5 + 1;
|
|
|
|
param_3 = pwVar5;
|
|
|
|
local_4 = (wchar_t *)FUN_0040b340(*(int *)pwVar13,0x5d,0x5c);
|
|
|
|
if (local_4 == (wchar_t *)0x0) {
|
|
|
|
FUN_00401340("variable-substitution string is missing \']\'");
|
|
|
|
uVar6 = FUN_0067f620(1,¶m_3);
|
|
|
|
FUN_0067d180(uVar6);
|
|
|
|
pwVar13 = param_3 + -10;
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(param_3 + -8));
|
|
|
|
if (LVar7 != 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (pwVar13 == (wchar_t *)0x0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
(*(code *)**(undefined4 **)pwVar13)(1);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (pwVar5 != local_4) {
|
|
|
|
do {
|
|
|
|
wVar2 = *pwVar5;
|
|
|
|
if (wVar2 == L'M') {
|
|
|
|
param_2 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
FUN_0067cf50(¶m_2);
|
|
|
|
sVar8 = wcslen(L"M");
|
|
|
|
FUN_004022d0(sVar8);
|
|
|
|
wcscpy(param_1,L"M");
|
|
|
|
piVar9 = (int *)FUN_004086c0(&local_c,¶m_1);
|
|
|
|
iVar3 = *(int *)(*piVar9 + -4);
|
|
|
|
if (iVar3 != 1) {
|
|
|
|
FUN_00402490(*piVar9,iVar3 + -1);
|
|
|
|
}
|
|
|
|
pcVar14 = InterlockedDecrement_exref;
|
|
|
|
puVar12 = (undefined4 *)(local_c + -0x14);
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(local_c + -0x10));
|
|
|
|
pwVar13 = param_1;
|
|
|
|
if ((LVar7 == 0) && (puVar12 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar12)(1);
|
|
|
|
pwVar13 = param_1;
|
|
|
|
}
|
|
|
|
LAB_0067ecf2:
|
|
|
|
iVar3 = (*pcVar14)(pwVar13 + -8);
|
|
|
|
if ((iVar3 == 0) && (pwVar13 + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(pwVar13 + -10))(1);
|
|
|
|
}
|
|
|
|
pwVar13 = param_1 + -10;
|
|
|
|
iVar3 = (*pcVar14)(param_1 + -8);
|
|
|
|
if ((iVar3 == 0) && (pwVar13 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pwVar13)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (wVar2 == L'F') {
|
|
|
|
param_2 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
FUN_0067cf80(¶m_2);
|
|
|
|
FUN_00402730(&DAT_007ff2dc);
|
|
|
|
piVar9 = (int *)FUN_004086c0(&iStack_8,&pwStack_10);
|
|
|
|
iVar3 = *(int *)(*piVar9 + -4);
|
|
|
|
if (iVar3 != 1) {
|
|
|
|
FUN_00402490(*piVar9,iVar3 + -1);
|
|
|
|
}
|
|
|
|
pcVar14 = InterlockedDecrement_exref;
|
|
|
|
puVar12 = (undefined4 *)(iStack_8 + -0x14);
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(iStack_8 + -0x10));
|
|
|
|
pwVar13 = pwStack_10;
|
|
|
|
if ((LVar7 == 0) && (puVar12 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar12)(1);
|
|
|
|
pwVar13 = pwStack_10;
|
|
|
|
}
|
|
|
|
goto LAB_0067ecf2;
|
|
|
|
}
|
|
|
|
if (wVar2 != L' ') {
|
|
|
|
param_2 = (undefined *)CONCAT22((short)((uint)local_4 >> 0x10),wVar2);
|
|
|
|
FUN_00402490(¶m_2,1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pwVar5 = param_3 + 1;
|
|
|
|
param_3 = pwVar5;
|
|
|
|
} while (pwVar5 != local_4);
|
|
|
|
}
|
|
|
|
wVar2 = pwVar5[1];
|
|
|
|
param_3 = pwVar5 + 1;
|
|
|
|
if (wVar2 != L'\0') {
|
|
|
|
do {
|
|
|
|
if ((wVar2 != L' ') && (wVar2 != L'\t')) {
|
|
|
|
FUN_00401340("there is text after the \']\' in a variable-substitution string");
|
|
|
|
uVar6 = FUN_0067f620(1,¶m_1);
|
|
|
|
FUN_0067d180(uVar6);
|
|
|
|
pwVar13 = param_1 + -10;
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(param_1 + -8));
|
|
|
|
if ((LVar7 == 0) && (pwVar13 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)pwVar13)(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
param_3 = param_3 + 1;
|
|
|
|
wVar2 = *param_3;
|
|
|
|
} while (wVar2 != L'\0');
|
|
|
|
FUN_0067e710(piVar4);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_0067e710(piVar4);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067ef30 at 0x0067EF30 (size: 51) ---
|
|
|
|
|
|
void FUN_0067ef30(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
|
|
|
|
iVar1 = FUN_005df0f5(0x28);
|
|
|
|
if (iVar1 != 0) {
|
|
|
|
DAT_008f8818 = FUN_0067e8f0(4);
|
|
|
|
*(undefined4 *)(DAT_008f8818 + 0x18) = param_1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
DAT_008f8818 = 0;
|
|
|
|
uRam00000018 = param_1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067ef70 at 0x0067EF70 (size: 98) ---
|
|
|
|
|
|
void FUN_0067ef70(int *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
int *piVar2;
|
|
|
|
LONG LVar3;
|
|
|
|
|
|
|
|
iVar1 = FUN_005df0f5(0x28);
|
|
|
|
if (iVar1 == 0) {
|
|
|
|
piVar2 = (int *)0x0;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
piVar2 = (int *)FUN_0067e8f0(5);
|
|
|
|
}
|
|
|
|
iVar1 = *piVar2;
|
|
|
|
if (iVar1 != *param_1) {
|
|
|
|
LVar3 = InterlockedDecrement((LONG *)(iVar1 + -0x10));
|
|
|
|
if ((LVar3 == 0) && ((undefined4 *)(iVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(iVar1 + -0x14))(1);
|
|
|
|
}
|
|
|
|
iVar1 = *param_1;
|
|
|
|
*piVar2 = iVar1;
|
|
|
|
InterlockedIncrement((LONG *)(iVar1 + -0x10));
|
|
|
|
}
|
|
|
|
FUN_0067e710(piVar2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067efe0 at 0x0067EFE0 (size: 1452) ---
|
|
|
|
|
|
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
|
|
|
|
/* WARNING (jumptable): Unable to track spacebase fully for stack */
|
|
|
|
/* WARNING: Unable to track spacebase fully for stack */
|
|
|
|
/* WARNING: Type propagation algorithm not settling */
|
|
|
|
|
|
|
|
undefined4 FUN_0067efe0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
undefined *puVar1;
|
|
|
|
int iVar2;
|
|
|
|
int iVar3;
|
|
|
|
short *psVar4;
|
|
|
|
LONG *lpAddend;
|
|
|
|
LONG LVar5;
|
|
|
|
long lVar6;
|
|
|
|
undefined1 *puVar7;
|
|
|
|
int *piVar8;
|
|
|
|
int iVar9;
|
|
|
|
int iVar10;
|
|
|
|
undefined4 *puVar11;
|
|
|
|
int iVar12;
|
|
|
|
short *psVar13;
|
|
|
|
int *piVar14;
|
|
|
|
wchar_t *_Str;
|
|
|
|
short local_4d0 [200];
|
|
|
|
int local_340 [199];
|
|
|
|
int local_24;
|
|
|
|
short *local_20;
|
|
|
|
int local_1c;
|
|
|
|
int local_18;
|
|
|
|
undefined4 *local_14;
|
|
|
|
int *local_10;
|
|
|
|
int *local_c;
|
|
|
|
int *local_8;
|
|
|
|
|
|
|
|
piVar8 = local_340;
|
|
|
|
iVar12 = 200;
|
|
|
|
do {
|
|
|
|
*piVar8 = (int)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
piVar8 = piVar8 + 1;
|
|
|
|
iVar12 = iVar12 + -1;
|
|
|
|
} while (iVar12 != 0);
|
|
|
|
local_14 = (undefined4 *)PTR_DAT_00818340;
|
|
|
|
local_c = local_340;
|
|
|
|
local_18 = 200;
|
|
|
|
local_20 = local_4d0;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
local_10 = (int *)0x0;
|
|
|
|
local_1c = 0;
|
|
|
|
DAT_008f88a0 = 0;
|
|
|
|
DAT_008f88a4 = 0xfffffffe;
|
|
|
|
psVar4 = (short *)&stack0xfffffb2e;
|
|
|
|
piVar8 = local_340;
|
|
|
|
psVar13 = local_4d0;
|
|
|
|
LAB_0067f065:
|
|
|
|
piVar14 = local_10;
|
|
|
|
iVar10 = local_18;
|
|
|
|
psVar4 = psVar4 + 1;
|
|
|
|
iVar12 = local_18 + -1;
|
|
|
|
*psVar4 = (short)local_10;
|
|
|
|
if (psVar13 + iVar12 <= psVar4) {
|
|
|
|
iVar12 = (int)psVar4 - (int)psVar13 >> 1;
|
|
|
|
iVar9 = iVar12 + 1;
|
|
|
|
local_8 = local_c;
|
|
|
|
if (9999 < iVar10) {
|
|
|
|
local_c = (int *)psVar13;
|
|
|
|
FUN_0067f8c0();
|
|
|
|
puVar11 = (undefined4 *)((int)local_14 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)((int)local_14 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar11 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar11)();
|
|
|
|
}
|
|
|
|
piVar8 = (int *)&local_20;
|
|
|
|
local_c = (int *)0xc8;
|
|
|
|
do {
|
|
|
|
piVar14 = piVar8 + 0xffffffff;
|
|
|
|
piVar8 = piVar8 + 0xffffffff;
|
|
|
|
puVar11 = (undefined4 *)(*piVar14 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(*piVar14 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar11 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar11)();
|
|
|
|
}
|
|
|
|
local_c = (int *)((int)local_c + -1);
|
|
|
|
} while (local_c != (int *)0x0);
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
local_18 = iVar10 * 2;
|
|
|
|
if (10000 < local_18) {
|
|
|
|
local_18 = 10000;
|
|
|
|
}
|
|
|
|
iVar3 = local_18;
|
|
|
|
iVar10 = -6 - local_18;
|
|
|
|
psVar4 = local_4d0 + (-6 - local_18);
|
|
|
|
iVar2 = -6 - local_18;
|
|
|
|
local_c = (int *)(iVar9 * 2);
|
|
|
|
local_20 = local_4d0 + (-6 - local_18);
|
|
|
|
if (0 < (int)local_c) {
|
|
|
|
do {
|
|
|
|
*(undefined1 *)psVar4 =
|
|
|
|
*(undefined1 *)((int)psVar4 + ((int)psVar13 - (int)(local_4d0 + iVar10)));
|
|
|
|
psVar4 = (short *)((int)psVar4 + 1);
|
|
|
|
local_c = (int *)((int)local_c + -1);
|
|
|
|
} while (local_c != (int *)0x0);
|
|
|
|
}
|
|
|
|
(local_4d0 + (-8 - iVar3))[0] = -0xf10;
|
|
|
|
(local_4d0 + (-8 - iVar3))[1] = 0x67;
|
|
|
|
puVar7 = &stack0xfffffb24;
|
|
|
|
piVar8 = (int *)(iVar9 * 4);
|
|
|
|
local_c = (int *)&stack0xfffffb24;
|
|
|
|
if (0 < (int)piVar8) {
|
|
|
|
iVar10 = (int)local_8 - (int)&stack0xfffffb24;
|
|
|
|
local_8 = piVar8;
|
|
|
|
do {
|
|
|
|
*puVar7 = puVar7[iVar10];
|
|
|
|
puVar7 = puVar7 + 1;
|
|
|
|
local_8 = (int *)((int)local_8 + -1);
|
|
|
|
} while (local_8 != (int *)0x0);
|
|
|
|
}
|
|
|
|
psVar4 = local_4d0 + ((iVar12 + -6) - iVar3);
|
|
|
|
piVar8 = (int *)((int)(piVar8 + -1) + (int)local_c);
|
|
|
|
piVar14 = local_10;
|
|
|
|
psVar13 = local_4d0 + iVar2;
|
|
|
|
if (local_4d0 + ((local_18 + -7) - iVar3) <= psVar4) goto LAB_0067f535;
|
|
|
|
}
|
|
|
|
local_8 = (int *)(int)*(short *)(&DAT_007ff6b8 + (int)piVar14 * 2);
|
|
|
|
if (local_8 != (int *)0xffff8000) {
|
|
|
|
if (DAT_008f88a4 == 0xfffffffe) {
|
|
|
|
DAT_008f88a4 = thunk_FUN_0067fac0();
|
|
|
|
piVar14 = local_10;
|
|
|
|
}
|
|
|
|
if ((int)DAT_008f88a4 < 1) {
|
|
|
|
iVar12 = 0;
|
|
|
|
DAT_008f88a4 = 0;
|
|
|
|
}
|
|
|
|
else if (DAT_008f88a4 < 0x106) {
|
|
|
|
iVar12 = (int)(char)(&DAT_007ff4f0)[DAT_008f88a4];
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar12 = 0x18;
|
|
|
|
}
|
|
|
|
iVar10 = (int)local_8 + iVar12;
|
|
|
|
if (((iVar10 < 0) || (0x16 < iVar10)) || (*(short *)(&DAT_007ff744 + iVar10 * 2) != iVar12))
|
|
|
|
goto LAB_0067f287;
|
|
|
|
local_8 = (int *)(int)*(short *)(&DAT_007ff714 + iVar10 * 2);
|
|
|
|
if ((int)local_8 < 0) {
|
|
|
|
if (local_8 == (int *)0xffff8000) goto LAB_0067f29a;
|
|
|
|
local_8 = (int *)-(int)local_8;
|
|
|
|
goto LAB_0067f1d1;
|
|
|
|
}
|
|
|
|
if (local_8 == (int *)0x0) goto LAB_0067f29a;
|
|
|
|
if (local_8 == (int *)0x21) {
|
|
|
|
LAB_0067f506:
|
|
|
|
FUN_004011b0();
|
|
|
|
FUN_00401030(local_340,4,200);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (DAT_008f88a4 != 0) {
|
|
|
|
DAT_008f88a4 = 0xfffffffe;
|
|
|
|
}
|
|
|
|
piVar8 = piVar8 + 1;
|
|
|
|
FUN_00402070();
|
|
|
|
if (local_1c != 0) {
|
|
|
|
local_1c = local_1c + -1;
|
|
|
|
}
|
|
|
|
local_10 = local_8;
|
|
|
|
goto LAB_0067f065;
|
|
|
|
}
|
|
|
|
LAB_0067f287:
|
|
|
|
local_8 = (int *)(int)*(short *)(&DAT_007ff658 + (int)piVar14 * 2);
|
|
|
|
if ((int *)(int)*(short *)(&DAT_007ff658 + (int)piVar14 * 2) == (int *)0x0) {
|
|
|
|
LAB_0067f29a:
|
|
|
|
if (local_1c == 0) {
|
|
|
|
DAT_008f88a0 = DAT_008f88a0 + 1;
|
|
|
|
FUN_0067f8c0();
|
|
|
|
piVar14 = local_10;
|
|
|
|
}
|
|
|
|
else if (local_1c == 3) {
|
|
|
|
if (DAT_008f88a4 == 0) {
|
|
|
|
LAB_0067f535:
|
|
|
|
puVar11 = (undefined4 *)((int)local_14 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)((int)local_14 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar11 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar11)();
|
|
|
|
}
|
|
|
|
piVar8 = (int *)&local_20;
|
|
|
|
local_c = (int *)0xc8;
|
|
|
|
do {
|
|
|
|
piVar14 = piVar8 + 0xffffffff;
|
|
|
|
piVar8 = piVar8 + 0xffffffff;
|
|
|
|
puVar11 = (undefined4 *)(*piVar14 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(*piVar14 + -0x10));
|
|
|
|
if ((LVar5 == 0) && (puVar11 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar11)();
|
|
|
|
}
|
|
|
|
local_c = (int *)((int)local_c + -1);
|
|
|
|
} while (local_c != (int *)0x0);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
DAT_008f88a4 = 0xfffffffe;
|
|
|
|
}
|
|
|
|
local_1c = 3;
|
|
|
|
do {
|
|
|
|
if (((*(short *)(&DAT_007ff6b8 + (int)piVar14 * 2) != -0x8000) &&
|
|
|
|
(iVar12 = *(short *)(&DAT_007ff6b8 + (int)piVar14 * 2) + 1, -1 < iVar12)) &&
|
|
|
|
((iVar12 < 0x17 && (*(short *)(&DAT_007ff744 + iVar12 * 2) == 1)))) {
|
|
|
|
piVar14 = (int *)(int)*(short *)(&DAT_007ff714 + iVar12 * 2);
|
|
|
|
if ((int)piVar14 < 0) {
|
|
|
|
if (piVar14 != (int *)0xffff8000) goto code_r0x0067f326;
|
|
|
|
}
|
|
|
|
else if (piVar14 != (int *)0x0) {
|
|
|
|
if (piVar14 == (int *)0x21) goto LAB_0067f506;
|
|
|
|
piVar8 = piVar8 + 1;
|
|
|
|
FUN_00402070();
|
|
|
|
local_10 = piVar14;
|
|
|
|
psVar13 = local_20;
|
|
|
|
goto LAB_0067f065;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (psVar4 == local_20) goto LAB_0067f535;
|
|
|
|
piVar14 = (int *)(int)psVar4[-1];
|
|
|
|
piVar8 = piVar8 + -1;
|
|
|
|
psVar4 = psVar4 + -1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
LAB_0067f1d1:
|
|
|
|
iVar12 = (int)*(short *)(&DAT_007ff628 + (int)local_8 * 2);
|
|
|
|
local_10 = (int *)iVar12;
|
|
|
|
if ((0 < iVar12) && (local_14 != (undefined4 *)piVar8[1 - iVar12])) {
|
|
|
|
lpAddend = (LONG *)((int)local_14 + -0x10);
|
|
|
|
local_14 = (undefined4 *)((int)local_14 + -0x14);
|
|
|
|
LVar5 = InterlockedDecrement(lpAddend);
|
|
|
|
if ((LVar5 == 0) && (local_14 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*local_14)();
|
|
|
|
}
|
|
|
|
local_14 = (undefined4 *)piVar8[1 - iVar12];
|
|
|
|
InterlockedIncrement((LONG *)((int)local_14 + -0x10));
|
|
|
|
}
|
|
|
|
switch(local_8) {
|
|
|
|
case (int *)0x9:
|
|
|
|
_Str = (wchar_t *)piVar8[-1];
|
|
|
|
goto LAB_0067f382;
|
|
|
|
case (int *)0xa:
|
|
|
|
_Str = (wchar_t *)piVar8[-2];
|
|
|
|
LAB_0067f382:
|
|
|
|
lVar6 = wcstol(_Str,(wchar_t **)0x0,10);
|
|
|
|
FUN_0067eab0(piVar8,lVar6);
|
|
|
|
break;
|
|
|
|
case (int *)0xb:
|
|
|
|
FUN_0067eab0(piVar8,0);
|
|
|
|
break;
|
|
|
|
case (int *)0xc:
|
|
|
|
FUN_0067eab0(piVar8,0);
|
|
|
|
break;
|
|
|
|
case (int *)0xd:
|
|
|
|
FUN_0067ef30();
|
|
|
|
break;
|
|
|
|
case (int *)0xe:
|
|
|
|
case (int *)0x10:
|
|
|
|
FUN_0067e8d0();
|
|
|
|
break;
|
|
|
|
case (int *)0xf:
|
|
|
|
lVar6 = wcstol((wchar_t *)piVar8[-1],(wchar_t **)0x0,10);
|
|
|
|
FUN_0067ef30(lVar6);
|
|
|
|
break;
|
|
|
|
case (int *)0x11:
|
|
|
|
FUN_0067ef70();
|
|
|
|
break;
|
|
|
|
case (int *)0x16:
|
|
|
|
FUN_0067ea40();
|
|
|
|
break;
|
|
|
|
case (int *)0x17:
|
|
|
|
FUN_0067e7a0();
|
|
|
|
}
|
|
|
|
piVar8 = piVar8 + (1 - (int)local_10);
|
|
|
|
puVar1 = (undefined *)*piVar8;
|
|
|
|
psVar4 = psVar4 + -(int)local_10;
|
|
|
|
if ((undefined4 *)puVar1 != local_14) {
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(puVar1 + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(puVar1 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar1 + -0x14))();
|
|
|
|
}
|
|
|
|
puVar11 = local_14;
|
|
|
|
*piVar8 = (int)local_14;
|
|
|
|
InterlockedIncrement((LONG *)((int)puVar11 + -0x10));
|
|
|
|
}
|
|
|
|
iVar12 = (int)*(short *)(&DAT_007ff6e4 + *(short *)(&DAT_007ff5f8 + (int)local_8 * 2) * 2) +
|
|
|
|
(int)*psVar4;
|
|
|
|
psVar13 = local_20;
|
|
|
|
if (((iVar12 < 0) || (0x16 < iVar12)) || (*(short *)(&DAT_007ff744 + iVar12 * 2) != *psVar4)) {
|
|
|
|
local_10 = (int *)(int)*(short *)(&DAT_007ff684 +
|
|
|
|
*(short *)(&DAT_007ff5f8 + (int)local_8 * 2) * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
local_10 = (int *)(int)*(short *)(&DAT_007ff714 + iVar12 * 2);
|
|
|
|
}
|
|
|
|
goto LAB_0067f065;
|
|
|
|
code_r0x0067f326:
|
|
|
|
local_8 = (int *)-(int)piVar14;
|
|
|
|
goto LAB_0067f1d1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067f5e0 at 0x0067F5E0 (size: 53) ---
|
|
|
|
|
|
undefined4 FUN_0067f5e0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
char cVar1;
|
|
|
|
short unaff_SI;
|
|
|
|
|
|
|
|
cVar1 = FUN_0067e6a0();
|
|
|
|
if ((unaff_SI == 0x7d) || (unaff_SI == 0x7c)) {
|
|
|
|
if (cVar1 == '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (unaff_SI == 0x7b) {
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (unaff_SI != 0x5e) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (cVar1 != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067f620 at 0x0067F620 (size: 6) ---
|
|
|
|
|
|
undefined4 FUN_0067f620(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
return DAT_008f8928;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067f630 at 0x0067F630 (size: 652) ---
|
|
|
|
|
|
undefined4 FUN_0067f630(long *param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
uint uVar1;
|
|
|
|
char cVar2;
|
|
|
|
uint in_EAX;
|
|
|
|
int iVar3;
|
|
|
|
wint_t *pwVar4;
|
|
|
|
int iVar5;
|
|
|
|
long lVar6;
|
|
|
|
short *psVar7;
|
|
|
|
wchar_t *pwVar8;
|
|
|
|
uint uVar9;
|
|
|
|
uint *unaff_EDI;
|
|
|
|
wchar_t local_800;
|
|
|
|
wchar_t local_7fe [1023];
|
|
|
|
|
|
|
|
cVar2 = FUN_0067e6a0();
|
|
|
|
if (cVar2 != '\0') {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
*unaff_EDI = in_EAX;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (in_EAX < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + in_EAX * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 0x23) {
|
|
|
|
*unaff_EDI = in_EAX + 1;
|
|
|
|
while( true ) {
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar7 != 0x20) && (*psVar7 != 9)) break;
|
|
|
|
*unaff_EDI = uVar9 + 1;
|
|
|
|
}
|
|
|
|
uVar9 = *(uint *)(DAT_008f8990 + -4);
|
|
|
|
uVar1 = *unaff_EDI;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + uVar9 * 2);
|
|
|
|
if (uVar1 < uVar9) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar1 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 != 0x2d) {
|
|
|
|
if (uVar1 < uVar9) {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + uVar1 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + -2 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
iVar3 = iswdigit(*pwVar4);
|
|
|
|
if (iVar3 == 0) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
pwVar8 = &local_800;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 0x2d) {
|
|
|
|
*unaff_EDI = uVar9 + 1;
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
pwVar8 = (wchar_t *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar8 = (wchar_t *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
local_800 = *pwVar8;
|
|
|
|
pwVar8 = local_7fe;
|
|
|
|
}
|
|
|
|
while( true ) {
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar7 != 0x20) && (*psVar7 != 9)) break;
|
|
|
|
*unaff_EDI = uVar9 + 1;
|
|
|
|
}
|
|
|
|
if (*unaff_EDI < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + *unaff_EDI * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
iVar3 = iswdigit(*pwVar4);
|
|
|
|
if (iVar3 != 0) {
|
|
|
|
iVar3 = (int)pwVar8 - (int)&local_800;
|
|
|
|
while( true ) {
|
|
|
|
if (*unaff_EDI < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + *unaff_EDI * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
pwVar4 = (wint_t *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
iVar5 = iswdigit(*pwVar4);
|
|
|
|
if ((iVar5 == 0) || (0x7ff < iVar3)) break;
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
*unaff_EDI = uVar9 + 1;
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
*pwVar8 = *(wchar_t *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
pwVar8 = pwVar8 + 1;
|
|
|
|
iVar3 = iVar3 + 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*pwVar8 = *(wchar_t *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
pwVar8 = pwVar8 + 1;
|
|
|
|
iVar3 = iVar3 + 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*pwVar8 = L'\0';
|
|
|
|
lVar6 = wcstol(&local_800,(wchar_t **)0x0,10);
|
|
|
|
*param_1 = lVar6;
|
|
|
|
while( true ) {
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar7 != 0x20) && (*psVar7 != 9)) break;
|
|
|
|
*unaff_EDI = uVar9 + 1;
|
|
|
|
}
|
|
|
|
uVar9 = *unaff_EDI;
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 0x3a) {
|
|
|
|
do {
|
|
|
|
uVar9 = uVar9 + 1;
|
|
|
|
*unaff_EDI = uVar9;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
} while ((*psVar7 == 0x20) || (*psVar7 == 9));
|
|
|
|
if (uVar9 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar9 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
if (((*psVar7 == 1) || (psVar7 = (short *)FUN_004075c0(uVar9), *psVar7 == 0x5e)) ||
|
|
|
|
(psVar7 = (short *)FUN_004075c0(uVar9), *psVar7 == 0x7b)) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067f8c0 at 0x0067F8C0 (size: 105) ---
|
|
|
|
|
|
void FUN_0067f8c0(undefined4 param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
LONG LVar1;
|
|
|
|
undefined4 *puVar2;
|
|
|
|
undefined4 local_c;
|
|
|
|
undefined4 local_8;
|
|
|
|
undefined *local_4;
|
|
|
|
|
|
|
|
local_4 = PTR_DAT_00818344;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818344 + -0x10));
|
|
|
|
local_c = DAT_008f8928;
|
|
|
|
local_8 = 1;
|
|
|
|
FUN_00405000(param_1);
|
|
|
|
FUN_0067d120(&local_c);
|
|
|
|
puVar2 = (undefined4 *)(local_4 + -0x14);
|
|
|
|
LVar1 = InterlockedDecrement((LONG *)(local_4 + -0x10));
|
|
|
|
if ((LVar1 == 0) && (puVar2 != (undefined4 *)0x0)) {
|
|
|
|
(**(code **)*puVar2)(1);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067f930 at 0x0067F930 (size: 390) ---
|
|
|
|
|
|
uint FUN_0067f930(uint param_1)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
undefined *puVar2;
|
|
|
|
uint uVar3;
|
|
|
|
wchar_t *_Source;
|
|
|
|
uint uVar4;
|
|
|
|
LONG LVar5;
|
|
|
|
short *psVar6;
|
|
|
|
short *psVar7;
|
|
|
|
ushort *puVar8;
|
|
|
|
LONG *lpAddend;
|
|
|
|
uint *unaff_EBX;
|
|
|
|
int *unaff_EDI;
|
|
|
|
uint uStack_8;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
uVar4 = FUN_0067e6a0();
|
|
|
|
if ((char)uVar4 == '\0') {
|
|
|
|
return uVar4;
|
|
|
|
}
|
|
|
|
iVar1 = *(int *)(DAT_008f8990 + -4);
|
|
|
|
*unaff_EBX = param_1;
|
|
|
|
puVar2 = (undefined *)*unaff_EDI;
|
|
|
|
uVar4 = iVar1 - 1;
|
|
|
|
local_4 = uVar4;
|
|
|
|
if (puVar2 != PTR_DAT_00818340) {
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(puVar2 + -0x10));
|
|
|
|
if ((LVar5 == 0) && ((undefined4 *)(puVar2 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar2 + -0x14))(1);
|
|
|
|
}
|
|
|
|
lpAddend = (LONG *)(PTR_DAT_00818340 + -0x10);
|
|
|
|
*unaff_EDI = (int)PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement(lpAddend);
|
|
|
|
}
|
|
|
|
psVar6 = (short *)*unaff_EBX;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + (int)*(short **)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (psVar6 < *(short **)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + (int)psVar6 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar7 == 0x5b) {
|
|
|
|
*unaff_EBX = (int)psVar6 + 1;
|
|
|
|
while( true ) {
|
|
|
|
uVar3 = *unaff_EBX;
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (uVar3 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar7 = (short *)(DAT_008f8990 + uVar3 * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar7 == 0x5d) || (uVar4 <= uVar3)) break;
|
|
|
|
*unaff_EBX = uVar3 + 1;
|
|
|
|
if (uVar3 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
puVar8 = (ushort *)(DAT_008f8990 + uVar3 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar8 = (ushort *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
uStack_8 = (uint)*puVar8;
|
|
|
|
if (*puVar8 != 0) {
|
|
|
|
_Source = (wchar_t *)*unaff_EDI;
|
|
|
|
iVar1 = *(int *)(_Source + -2);
|
|
|
|
if ((*(int *)(_Source + -8) == 1) && (iVar1 + 1U <= *(uint *)(_Source + -6))) {
|
|
|
|
*(uint *)(_Source + -2) = iVar1 + 1U;
|
|
|
|
*(undefined4 *)(*unaff_EDI + -8) = 0xffffffff;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
FUN_004022d0(iVar1);
|
|
|
|
wcscpy((wchar_t *)*unaff_EDI,_Source);
|
|
|
|
LVar5 = InterlockedDecrement((LONG *)(_Source + -8));
|
|
|
|
if ((LVar5 == 0) && (_Source + -10 != (wchar_t *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(_Source + -10))(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
wcsncpy((wchar_t *)(*unaff_EDI + -2 + iVar1 * 2),(wchar_t *)&uStack_8,1);
|
|
|
|
*(undefined2 *)(*unaff_EDI + -2 + *(int *)(*unaff_EDI + -4) * 2) = 0;
|
|
|
|
uVar4 = local_4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uVar4 = *unaff_EBX;
|
|
|
|
if (uVar4 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar6 = (short *)(DAT_008f8990 + uVar4 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
psVar6 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
if (*psVar6 == 0x5d) {
|
|
|
|
*unaff_EBX = uVar4 + 1;
|
|
|
|
return CONCAT31((int3)((uint)psVar6 >> 8),1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (uint)psVar6 & 0xffffff00;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// --- FUN_0067fac0 at 0x0067FAC0 (size: 1351) ---
|
|
|
|
|
|
uint FUN_0067fac0(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int iVar1;
|
|
|
|
ushort uVar2;
|
|
|
|
short sVar3;
|
|
|
|
uint uVar4;
|
|
|
|
undefined *puVar5;
|
|
|
|
char cVar6;
|
|
|
|
LONG LVar7;
|
|
|
|
uint uVar8;
|
|
|
|
int iVar9;
|
|
|
|
undefined4 uVar10;
|
|
|
|
short *psVar11;
|
|
|
|
short *psVar12;
|
|
|
|
undefined2 *puVar13;
|
|
|
|
ushort *puVar14;
|
|
|
|
uint uVar15;
|
|
|
|
uint local_c;
|
|
|
|
uint local_8;
|
|
|
|
uint local_4;
|
|
|
|
|
|
|
|
puVar5 = PTR_DAT_00818340;
|
|
|
|
InterlockedIncrement((LONG *)(PTR_DAT_00818340 + -0x10));
|
|
|
|
uVar4 = *(uint *)(DAT_008f8990 + -4);
|
|
|
|
uVar15 = uVar4 - 1;
|
|
|
|
local_4 = uVar15;
|
|
|
|
if (uVar15 <= DAT_008f8928) {
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(puVar5 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(puVar5 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar5 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0xffffffff;
|
|
|
|
}
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 < uVar4) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar11 != 1) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 < uVar4) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar11 == 0x7b) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 + 1 < uVar4) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + (DAT_008f8928 + 1) * 2);
|
|
|
|
}
|
|
|
|
if ((*psVar11 == 0x7b) && (cVar6 = FUN_0067e6a0(), cVar6 == '\0')) {
|
|
|
|
uVar4 = *(uint *)(DAT_008f8990 + -4);
|
|
|
|
uVar8 = DAT_008f8928 + 2;
|
|
|
|
uVar15 = DAT_008f8928 + 3;
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + uVar8 * 2);
|
|
|
|
DAT_008f8928 = uVar8;
|
|
|
|
do {
|
|
|
|
psVar12 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 < uVar4) {
|
|
|
|
psVar12 = psVar11;
|
|
|
|
}
|
|
|
|
if (*psVar12 == 0x7d) {
|
|
|
|
psVar12 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (uVar15 < uVar4) {
|
|
|
|
psVar12 = psVar11 + 1;
|
|
|
|
}
|
|
|
|
if (*psVar12 == 0x7d) {
|
|
|
|
LAB_0067fc58:
|
|
|
|
FUN_0040b220();
|
|
|
|
iVar9 = DAT_008f8928 - uVar8;
|
|
|
|
if (iVar9 != 0) {
|
|
|
|
uVar10 = FUN_004075c0(uVar8);
|
|
|
|
FUN_00402490(uVar10,iVar9);
|
|
|
|
}
|
|
|
|
uVar15 = DAT_008f8928;
|
|
|
|
psVar11 = (short *)FUN_004075c0(DAT_008f8928);
|
|
|
|
if ((*psVar11 == 0x7d) &&
|
|
|
|
(psVar11 = (short *)FUN_004075c0(uVar15 + 1), *psVar11 == 0x7d)) {
|
|
|
|
DAT_008f8928 = uVar15 + 2;
|
|
|
|
}
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x105;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
psVar12 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 < uVar4) {
|
|
|
|
psVar12 = psVar11;
|
|
|
|
}
|
|
|
|
if (*psVar12 == 0) goto LAB_0067fc58;
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
uVar15 = uVar15 + 1;
|
|
|
|
psVar11 = psVar11 + 1;
|
|
|
|
} while( true );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
cVar6 = FUN_0067f5e0();
|
|
|
|
if (cVar6 != '\0') {
|
|
|
|
if (DAT_008f8928 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
puVar14 = (ushort *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar14 = (ushort *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
uVar2 = *puVar14;
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(puVar5 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(puVar5 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar5 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return (uint)uVar2;
|
|
|
|
}
|
|
|
|
cVar6 = FUN_0067f630(&local_8);
|
|
|
|
if (cVar6 != '\0') {
|
|
|
|
DAT_008f8928 = local_c;
|
|
|
|
FUN_0040b220();
|
|
|
|
FUN_0047b520(local_8);
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x103;
|
|
|
|
}
|
|
|
|
cVar6 = FUN_0067f930(DAT_008f8928);
|
|
|
|
if (cVar6 != '\0') {
|
|
|
|
DAT_008f8928 = local_c;
|
|
|
|
FUN_0040b220();
|
|
|
|
iVar9 = *(int *)(puVar5 + -4);
|
|
|
|
uVar15 = 0;
|
|
|
|
if (0 < iVar9 + -1) {
|
|
|
|
do {
|
|
|
|
uVar4 = *(uint *)(puVar5 + -4);
|
|
|
|
iVar1 = uVar4 * 2 + -2;
|
|
|
|
if (uVar15 < uVar4) {
|
|
|
|
iVar1 = uVar15 * 2;
|
|
|
|
}
|
|
|
|
if (*(short *)(puVar5 + iVar1) != 0x20) {
|
|
|
|
iVar1 = uVar4 * 2 + -2;
|
|
|
|
if (uVar15 < uVar4) {
|
|
|
|
iVar1 = uVar15 * 2;
|
|
|
|
}
|
|
|
|
local_8 = (uint)*(ushort *)(puVar5 + iVar1);
|
|
|
|
FUN_00402490(&local_8,1);
|
|
|
|
}
|
|
|
|
uVar15 = uVar15 + 1;
|
|
|
|
} while ((int)uVar15 < iVar9 + -1);
|
|
|
|
}
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
while( true ) {
|
|
|
|
psVar12 = (short *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
if (DAT_008f8928 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
psVar12 = psVar11;
|
|
|
|
}
|
|
|
|
if ((*psVar12 != 0x20) && (*psVar12 != 9)) break;
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
psVar11 = psVar11 + 1;
|
|
|
|
}
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(puVar5 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(puVar5 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar5 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0x104;
|
|
|
|
}
|
|
|
|
FUN_0040b220();
|
|
|
|
if (DAT_008f8928 < uVar15) {
|
|
|
|
while( true ) {
|
|
|
|
uVar15 = *(uint *)(DAT_008f8990 + -4);
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar15 * 2);
|
|
|
|
if (DAT_008f8928 < uVar15) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar11 == 1) break;
|
|
|
|
if (DAT_008f8928 < uVar15) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar15 * 2);
|
|
|
|
}
|
|
|
|
sVar3 = *psVar11;
|
|
|
|
cVar6 = FUN_0067e6a0();
|
|
|
|
if ((sVar3 == 0x7d) || (sVar3 == 0x7c)) {
|
|
|
|
if (cVar6 != '\0') break;
|
|
|
|
}
|
|
|
|
else if (((sVar3 == 0x7b) || (sVar3 == 0x5e)) && (cVar6 == '\0')) break;
|
|
|
|
cVar6 = FUN_0067f630(&local_8);
|
|
|
|
if ((cVar6 != '\0') || (cVar6 = FUN_0067f930(DAT_008f8928), cVar6 != '\0')) break;
|
|
|
|
uVar15 = *(uint *)(DAT_008f8990 + -4);
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + -2 + uVar15 * 2);
|
|
|
|
if (DAT_008f8928 < uVar15) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
if (*psVar11 == 0x5c) {
|
|
|
|
if (DAT_008f8928 + 1 < uVar15) {
|
|
|
|
puVar13 = (undefined2 *)(DAT_008f8990 + (DAT_008f8928 + 1) * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar13 = (undefined2 *)(DAT_008f8990 + -2 + uVar15 * 2);
|
|
|
|
}
|
|
|
|
cVar6 = FUN_0067c690(*puVar13);
|
|
|
|
if (cVar6 != '\0') {
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
local_8 = 0x5c;
|
|
|
|
FUN_00402490(&local_8,1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (DAT_008f8928 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
puVar14 = (ushort *)(DAT_008f8990 + DAT_008f8928 * 2);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
puVar14 = (ushort *)(DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2);
|
|
|
|
}
|
|
|
|
local_8 = (uint)*puVar14;
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
FUN_00402490(&local_8,1);
|
|
|
|
if (local_4 <= DAT_008f8928) break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
FUN_004011b0();
|
|
|
|
return 0x101;
|
|
|
|
}
|
|
|
|
uVar8 = DAT_008f8928 + 1;
|
|
|
|
DAT_008f8928 = uVar8;
|
|
|
|
if (uVar8 < uVar15) {
|
|
|
|
psVar11 = (short *)(DAT_008f8990 + uVar8 * 2);
|
|
|
|
do {
|
|
|
|
psVar12 = (short *)(DAT_008f8990 + -2 + uVar4 * 2);
|
|
|
|
if (DAT_008f8928 < uVar4) {
|
|
|
|
psVar12 = psVar11;
|
|
|
|
}
|
|
|
|
if (*psVar12 == 1) break;
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
psVar11 = psVar11 + 1;
|
|
|
|
} while (DAT_008f8928 < uVar15);
|
|
|
|
}
|
|
|
|
FUN_0040b220();
|
|
|
|
if (DAT_008f8928 - uVar8 != 0) {
|
|
|
|
if (uVar8 < *(uint *)(DAT_008f8990 + -4)) {
|
|
|
|
iVar9 = DAT_008f8990 + uVar8 * 2;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
iVar9 = DAT_008f8990 + -2 + *(uint *)(DAT_008f8990 + -4) * 2;
|
|
|
|
}
|
|
|
|
FUN_00402490(iVar9,DAT_008f8928 - uVar8);
|
|
|
|
}
|
|
|
|
DAT_008f8928 = DAT_008f8928 + 1;
|
|
|
|
LVar7 = InterlockedDecrement((LONG *)(puVar5 + -0x10));
|
|
|
|
if ((LVar7 == 0) && ((undefined4 *)(puVar5 + -0x14) != (undefined4 *)0x0)) {
|
|
|
|
(*(code *)**(undefined4 **)(puVar5 + -0x14))(1);
|
|
|
|
}
|
|
|
|
return 0x102;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|