/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x14018bf70 FUN_14018bf70 * Pseudocode, not original source. */ /* WARNING: Removing unreachable block (ram,0x00014018c44b) */ /* WARNING: Removing unreachable block (ram,0x00014018c452) */ /* WARNING: Removing unreachable block (ram,0x00014018c460) */ /* WARNING: Removing unreachable block (ram,0x00014018c46d) */ /* WARNING: Removing unreachable block (ram,0x00014018c465) */ /* WARNING: Removing unreachable block (ram,0x00014018c473) */ /* WARNING: Removing unreachable block (ram,0x00014018c485) */ /* WARNING: Removing unreachable block (ram,0x00014018c0ea) */ undefined8 FUN_14018bf70(longlong param_1,uint param_2,int *param_3) { longlong lVar1; undefined8 *puVar2; ulonglong uVar3; uint uVar4; int iVar5; undefined8 uVar6; longlong *plVar7; longlong *plVar8; undefined8 *puVar9; longlong *plVar10; longlong *plVar11; uint uVar12; longlong lVar13; uint *puVar14; longlong *plVar15; longlong *plVar16; longlong *plVar17; longlong *plVar18; double dVar19; double dVar20; double dVar21; longlong *local_res8; undefined **local_90; longlong *local_88; longlong *local_80; ulonglong local_78; int local_70; undefined4 local_6c; longlong *local_68; longlong lStack_60; longlong *local_58; longlong lStack_50; undefined8 local_48; local_48 = 0xfffffffffffffffe; uVar6 = (**(code **)(*(longlong *)(param_1 + -0xa8) + 0x58))(param_1 + -0xa8); FUN_14016db50(uVar6); if (DAT_14034c86f != '\0') { (**(code **)(*(longlong *)(param_1 + -0xa8) + 200))(param_1 + -0xa8); } uVar3 = (ulonglong)param_2 % (ulonglong)*(uint *)(param_1 + 0xbf8); if ((*(longlong *)(param_1 + 0xbd8) != 0) && (puVar14 = *(uint **)(*(longlong *)(param_1 + 0xbd8) + uVar3 * 8), puVar14 != (uint *)0x0)) { while ((uint)uVar3 == puVar14[8] % *(uint *)(param_1 + 0xbf8)) { if (*puVar14 == param_2) { lVar1 = *(longlong *)(puVar14 + 2); if ((lVar1 != 0) && (*(longlong *)(lVar1 + 0x228) == 0)) { plVar8 = (longlong *)0x0; param_3[0] = 0; param_3[1] = 0; param_3[3] = *(int *)(lVar1 + 0x1d0); param_3[2] = *(int *)(lVar1 + 0x1d4); plVar7 = plVar8; if (*(longlong *)(lVar1 + 0x6c0) != 0) { plVar7 = *(longlong **)(lVar1 + 0x6b0); } for (; plVar7 != (longlong *)0x0; plVar7 = (longlong *)plVar7[2]) { plVar15 = plVar8; if ((undefined8 *)*plVar7 != (undefined8 *)0x0) { plVar15 = *(longlong **)*plVar7; } if ((char)plVar15[0x22] != '\0') { *param_3 = *param_3 + 1; plVar15 = plVar8; if ((undefined8 *)*plVar7 != (undefined8 *)0x0) { plVar15 = *(longlong **)*plVar7; } if ((char)plVar15[1] == '\0') { param_3[1] = param_3[1] + 1; } } } FUN_14016dbe0(uVar6); return 1; } break; } puVar14 = *(uint **)(puVar14 + 4); if (puVar14 == (uint *)0x0) break; } } plVar8 = (longlong *)FUN_14018bc80(param_1 + -0xa8,&local_res8,param_2); plVar15 = (longlong *)0x0; plVar7 = plVar15; if ((undefined8 *)*plVar8 != (undefined8 *)0x0) { plVar7 = *(longlong **)*plVar8; } if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) { lVar1 = *local_res8; if (lVar1 != 0) { FUN_140178e60(lVar1); FUN_14016d970(lVar1); } FUN_14016d970(local_res8); } if (plVar7 == (longlong *)0x0) { FUN_14016dbe0(uVar6); uVar6 = 0; } else { param_3[0] = 0; param_3[1] = 0; param_3[2] = 0; param_3[3] = 0; local_90 = Proud::CFastArray::vftable; local_88 = (longlong *)0x0; local_6c = 0; local_80 = (longlong *)0x0; local_78 = 0; lVar1 = plVar7[5]; dVar19 = (double)lVar1; if (lVar1 < 0) { dVar19 = dVar19 + 1.8446744073709552e+19; } uVar4 = 2; uVar12 = 2; dVar20 = 1.0; dVar21 = 1.0; while( true ) { if ((uVar12 & 1) != 0) { dVar21 = dVar21 * dVar19; } uVar12 = uVar12 >> 1; if (uVar12 == 0) break; dVar19 = dVar19 * dVar19; } if (1.0 < dVar21 * 0.5) { dVar19 = (double)lVar1; if (lVar1 < 0) { dVar19 = dVar19 + 1.8446744073709552e+19; } while( true ) { if ((uVar4 & 1) != 0) { dVar20 = dVar20 * dVar19; } uVar4 = uVar4 >> 1; if (uVar4 == 0) break; dVar19 = dVar19 * dVar19; } dVar20 = dVar20 * 0.5; } local_70 = 0; if (0 < (int)dVar20) { local_70 = (int)dVar20; } plVar8 = plVar15; plVar10 = plVar15; plVar17 = plVar15; if (lVar1 != 0) { plVar8 = (longlong *)plVar7[3]; plVar10 = (longlong *)0x0; } for (; plVar8 != (longlong *)0x0; plVar8 = (longlong *)plVar8[3]) { iVar5 = (*(code *)**(undefined8 **)plVar8[2])(); if (((iVar5 != 1) && (lVar1 = plVar8[2], lVar1 != 0)) && (lVar1 != 0x40)) { param_3[3] = param_3[3] + *(int *)(lVar1 + 400); param_3[2] = param_3[2] + *(int *)(lVar1 + 0x194); lVar13 = lVar1 + 0x660; plVar18 = plVar15; local_68 = plVar15; lStack_60 = lVar13; local_58 = plVar15; lStack_50 = lVar13; if (*(longlong *)(lVar1 + 0x680) != 0) { plVar18 = *(longlong **)(lVar1 + 0x670); local_68 = plVar18; local_58 = plVar18; } LAB_14018c2c0: if (plVar18 != (longlong *)0x0) { puVar2 = (undefined8 *)*plVar18; plVar11 = plVar15; if (puVar2 != (undefined8 *)0x0) { plVar11 = (longlong *)*puVar2; } uVar12 = *(uint *)(plVar7 + 6); uVar3 = (ulonglong)*(uint *)(plVar11[0x20] + 0x6f8) % (ulonglong)uVar12; lVar1 = plVar7[2]; if ((lVar1 != 0) && (puVar14 = *(uint **)(lVar1 + uVar3 * 8), puVar14 != (uint *)0x0)) { while ((uint)uVar3 == puVar14[10] % uVar12) { if (*puVar14 == *(uint *)(plVar11[0x20] + 0x6f8)) { if (puVar14 != (uint *)0x0) { plVar11 = plVar15; if (puVar2 != (undefined8 *)0x0) { plVar11 = (longlong *)*puVar2; } uVar3 = (ulonglong)*(uint *)(plVar11[0x21] + 0x6f8) % (ulonglong)uVar12; puVar14 = *(uint **)(lVar1 + uVar3 * 8); if (puVar14 != (uint *)0x0) goto LAB_14018c374; } break; } puVar14 = *(uint **)(puVar14 + 6); if (puVar14 == (uint *)0x0) break; } } goto LAB_14018c4a4; } if (lStack_50 != lVar13) { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x80004005); } } } if (plVar17 != (longlong *)0x0) { if (local_88 == (longlong *)0x0) { FUN_14016d970(plVar17); } else { (**(code **)(*local_88 + 0x18))(local_88,plVar17); } } FUN_14016dbe0(uVar6); uVar6 = 1; } return uVar6; while( true ) { if (*puVar14 == *(uint *)(plVar11[0x21] + 0x6f8)) { if (puVar14 != (uint *)0x0) { plVar11 = plVar15; if (puVar2 != (undefined8 *)0x0) { plVar11 = (longlong *)*puVar2; } iVar5 = (int)plVar10; if (iVar5 < 1) goto LAB_14018c3db; puVar9 = (undefined8 *)FUN_14016ab80(&local_90); plVar16 = plVar15; goto LAB_14018c3c0; } break; } puVar14 = *(uint **)(puVar14 + 6); if (puVar14 == (uint *)0x0) break; LAB_14018c374: if ((uint)uVar3 != puVar14[10] % uVar12) break; } goto LAB_14018c4a4; while( true ) { uVar12 = (int)plVar16 + 1; plVar16 = (longlong *)(ulonglong)uVar12; puVar9 = puVar9 + 1; if (iVar5 <= (int)uVar12) break; LAB_14018c3c0: if (plVar11 == (longlong *)*puVar9) { if ((int)plVar16 != -1) goto LAB_14018c4a4; break; } } LAB_14018c3db: plVar10 = plVar15; if (puVar2 != (undefined8 *)0x0) { plVar10 = (longlong *)*puVar2; } if ((char)plVar10[0x22] != '\0') { *param_3 = *param_3 + 1; plVar10 = plVar15; if ((undefined8 *)*plVar18 != (undefined8 *)0x0) { plVar10 = *(longlong **)*plVar18; } if ((char)plVar10[1] == '\0') { param_3[1] = param_3[1] + 1; } } plVar17 = plVar15; if ((longlong *)*plVar18 != (longlong *)0x0) { plVar17 = *(longlong **)*plVar18; } if (iVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_14016add0(&local_90); plVar10 = (longlong *)(local_78 & 0xffffffff); plVar11 = local_80; if ((int)local_78 == 0) { plVar11 = plVar15; } plVar11[iVar5] = (longlong)plVar17; plVar17 = local_80; LAB_14018c4a4: plVar18 = (longlong *)plVar18[2]; goto LAB_14018c2c0; }