/* opm 25.0.0.60 (638c0601) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf * functions: 49 total in build, 37 named, 12 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 10, "FUZZY": 0, "MNEM": 10, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 0, "none": 25, "protos": 3, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same * function lines up across versions. See the .index.json sidecar for * name -> address. * * CAUTION on ported names: a name is only an identity claim at tier=EXACT. * At tier=MNEM/FUZZY the bytes differ from the reference, so any ADDRESS or * CONTENT HASH embedded in the name (e.g. *_4025F8, gcp_lib__*) still * refers to the REFERENCE build and does not describe this one. */ /* These did not match the reference above the 0.90 similarity floor and are * deliberately left unnamed rather than guessed. Ordered by size then body * hash, because sub_* numbering is not stable across builds. */ /* ==== ANON size=8 ==== */ void __fastcall sub_407BB0(int a1, int _R1, int *a3) { int v3; // r0 unsigned int v9; // r0 int v10; // r7 int v11; // r3 int v12; // r6 __int16 v13; // r3 _DWORD *v14; // r2 int v15; // r3 unsigned int v16; // r4 unsigned int v17; // r6 int v18; // r7 int v19; // r5 unsigned int v20; // r4 _DWORD *v21; // r4 int v22; // r2 int v23; // r3 int v24; // r5 int v25; // r7 unsigned int v26; // r10 int v27; // lr char *v28; // r5 int v30; // [sp+D4h] [bp-108h] v28 = *(char **)((char *)a3 + a1); while ( 1 ) { v9 = a1 + 118; v10 = (int)off_4079B0; v11 = *(_DWORD *)(v9 + 104) - 134; *(_DWORD *)&v28[(_DWORD)a3] = off_4079B0; v12 = v10 >> 6; v13 = v11 + 169; __asm { LDCL p1, c3, [PC], {0xDC} } if ( (unsigned int)v28 > 0x2D ) break; *(_DWORD *)v10 = _R1; v15 = *a3; v16 = a3[1]; v17 = a3[2]; v18 = a3[3]; v14 = a3 + 4; *((_WORD *)v14 + 8) = _R1; v19 = *(unsigned __int8 *)(v15 + 4); __mcr(0, 3, v16, 2, 10, 0); v20 = v17 >> 25; STACK[0x35C] = v9; if ( v18 != 0 ) { MEMORY[0xC] = *(_WORD *)(*(unsigned __int8 *)(v15 + 10) + v18); *((_BYTE *)v14 + 4) = v20 - 76; JUMPOUT(0x4079F4); } __asm { STC p9, c15, [R4,#0x218] } *(_BYTE *)(*(unsigned __int8 *)(v15 + 10) + 0x16) = v17; __mcr(14, 4, v26, 8, 13, 0); __asm { SVC 0x5B ; '[' } _VF = __OFADD__(v20, 128); v21 = (_DWORD *)(v20 + 128); v22 = v21[1]; v23 = *(_DWORD *)(v21[3] + 116); v24 = *(_DWORD *)(*(unsigned __int8 *)((v19 >> 5) + 0x1F) - 215 + v30); if ( !_VF ) { *(_WORD *)(v22 + v24) = v24; JUMPOUT(0x407910); } v3 = v23 - 6; if ( v23 >= 6 ) { *(_DWORD *)(2 * v23) = v3; __udf(0x67u); } _T1 = *(_DWORD *)(v27 - 156); v27 -= 156; __asm { LDC p1, c13, [LR,#-0x9C]! } a3 = *(int **)(v22 + 124); v28 = (char *)off_407BD8; _R1 = *(_DWORD *)(v3 + *v21); *(_BYTE *)(_R1 + 20) = _R1; a1 = dword_4079A4; } *(_BYTE *)(v10 + 26) = (_BYTE)v28; *(_WORD *)((v10 >> 6) + 0x26) = v13; v25 = dword_407A38; __asm { STC p6, c7, [R11,#0x1C4]! } a3[30] = (int)a3; if ( !__OFSUB__(v25, 102) ) { __cdp(0, 9, 10, 1, 2, 6); __asm { LDCVC p14, c3, [R1,#-0x1A4]! } } *(_WORD *)(v12 + 34) = v25; __asm { POP {R0-R5,PC} } } /* ==== ANON size=26 ==== */ int __fastcall sub_402DE2(char *a1, char *a2, int a3) { unsigned __int8 v3; // r3 char v4; // r4 char v5; // t1 char v6; // t1 v3 = 0; while ( a3 != 0 ) { v5 = *a1++; v4 = v5; --a3; v6 = *a2++; v3 |= v4 ^ v6; } return v3; } /* ==== ANON size=32 ==== */ int __fastcall sub_4017F0(int a1) { if ( *(_DWORD *)(a1 + 20) <= 1u ) JUMPOUT(0x401828); return 561; } /* ==== ANON size=38 ==== */ int sub_402F84() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== ANON size=96 ==== */ int __fastcall sub_4012CC(int *a1, int a2, unsigned int a3) { unsigned int v5; // r4 int *v6; // r5 unsigned int v7; // r1 int v8; // r3 char v9; // t1 int result; // r0 int v11; // r0 int v12[65]; // [sp+0h] [bp-108h] BYREF int v13; // [sp+104h] [bp-4h] v13 = dword_402E90; if ( a1 != nullptr && a2 != 0 ) { v5 = a3; if ( a3 <= 0x100 ) { v6 = v12; v7 = 256 - a3; if ( a3 > 0xFF ) v7 = 0; opm_lib_zero_fill_bytes(result: (_BYTE *)v12 + a3, a2: v7); sub_401058(result: v12, a2: a1, a3: v5, a4: v8); while ( v5 != 0 ) { v9 = *(_BYTE *)v6; v6 = (int *)((char *)v6 + 1); *(_BYTE *)(a2 - 1 + v5--) = v9; } } } result = dword_402E90 - v13; if ( dword_402E90 != v13 ) { v11 = ((int (__fastcall *)(int))loc_402E94)(a1: result); return sub_40132C(a1: v11); } return result; } /* ==== ANON size=98 ==== */ int __fastcall sub_401718(_DWORD *a1) { unsigned int v1; // r1 int *v2; // r3 int v3; // r1 int i; // r2 int v5; // r1 int *v6; // r3 int v7; // r4 v1 = a1[7]; if ( v1 > 1 ) return 529; if ( v1 == 0 && a1[6] != 0 ) return 268; v2 = (int *)off_4017E8; v3 = 0; for ( i = 0; ; ++i ) { if ( v3 == 1408 ) return 528; if ( (*off_4017E8)[v3] == 0 ) break; v3 += 22; } (*off_4017E8)[v3] = 1; v6 = &v2[v3]; v6[1] = a1[7] != 0; v6[13] = a1[5]; v6[12] = a1[4]; v5 = 0; v7 = a1[6]; v6[18] = 0; v6[14] = v7; a1[2311] = i; return v5; } /* ==== ANON size=136 ==== */ int *__fastcall sub_401058(int *result, int *a2, unsigned int a3, int a4) { unsigned int v4; // r12 char v5; // r3 char v6; // t1 bool v7; // cf bool v8; // cc unsigned int v9; // r2 char v10; // t1 char v11; // t1 bool v12; // cf unsigned int v13; // r2 int *v14; // r1 int v15; // t1 int v16; // t1 int v17; // t1 bool v18; // cf bool v19; // nf int v20; // r2 _BYTE *v21; // r1 char v22; // t1 char v23; // t1 _BYTE *v24; // r0 if ( a3 > 3 ) { v4 = (unsigned __int8)result & 3; if ( ((unsigned __int8)result & 3) != 0 ) { v6 = *(_BYTE *)a2; a2 = (int *)((char *)a2 + 1); v5 = v6; v7 = v4 >= 2; v8 = ((unsigned __int8)result & 3) == 3; v9 = a3 + v4; if ( ((unsigned __int8)result & 3) != 3 ) { v10 = *(_BYTE *)a2; a2 = (int *)((char *)a2 + 1); LOBYTE(v4) = v10; } *(_BYTE *)result = v5; result = (int *)((char *)result + 1); if ( !v7 ) { v11 = *(_BYTE *)a2; a2 = (int *)((char *)a2 + 1); v5 = v11; } a3 = v9 - 4; if ( !v8 ) { *(_BYTE *)result = v4; result = (int *)((char *)result + 1); } if ( !v7 ) { *(_BYTE *)result = v5; result = (int *)((char *)result + 1); } } LOBYTE(a4) = (unsigned __int8)a2 & 3; if ( ((unsigned __int8)a2 & 3) == 0 ) return opm_memcpy_aligned(result, a2, a3, a4: 0); v12 = a3 >= 8; v13 = a3 - 8; while ( v12 ) { v15 = *a2; v14 = a2 + 1; a4 = v15; v12 = v13 >= 8; v13 -= 8; v16 = *v14; a2 = v14 + 1; LOBYTE(v4) = v16; *result = a4; result[1] = v16; result += 2; } a3 = v13 + 4; if ( (a3 & 0x80000000) == 0 ) { v17 = *a2++; LOBYTE(a4) = v17; *result++ = v17; } } v18 = __CFSHL__(a3, 31); v20 = a3 << 31; v19 = v20 < 0; if ( v18 ) { v22 = *(_BYTE *)a2; v21 = (char *)a2 + 1; LOBYTE(a4) = v22; v23 = *v21; a2 = (int *)(v21 + 1); LOBYTE(v4) = v23; } if ( v20 < 0 ) LOBYTE(v20) = *(_BYTE *)a2; if ( v18 ) { *(_BYTE *)result = a4; v24 = (char *)result + 1; *v24 = v4; result = (int *)(v24 + 1); } if ( v19 ) { *(_BYTE *)result = v20; return (int *)((char *)result + 1); } return result; } /* ==== ANON size=168 ==== */ int __fastcall sub_402B4C(int a1, int a2, char a3, int a4) { int result; // r0 struct opm_req *v6; // r5 unsigned int v7; // r0 struct ta_params *v8; // r1 int v9; // r2 int v10; // r3 struct opm_req *v11; // r0 int v12; // r1 result = dword_402BF4; if ( (a3 & 0xF) == 7 && a4 != 0 ) { if ( *(_DWORD *)(a4 + 4) >= 0x3D54u ) { v6 = *(struct opm_req **)a4; if ( *(_DWORD *)a4 != 0 ) { if ( v6->cmd_id == 11 ) { *off_402BF8 = v6->field10; v7 = 0; } else { v7 = opm_sysdrv_rpc_304(); if ( v7 == 0 ) { switch ( v6->cmd_id ) { case 1u: v7 = sub_401718(a1: v6); break; case 2u: v7 = sub_401810(a1: (int)v6); break; case 3u: v7 = sub_4017F0(a1: (int)v6); break; case 4u: v7 = opm_cmd04(ctx: v6, params: v8); break; case 5u: v7 = opm_cmd05(ctx: v6, params: v8); break; case 6u: v11 = v6; v12 = 0; goto LABEL_20; case 7u: v11 = v6; v12 = 1; LABEL_20: v7 = ((int (__fastcall *)(struct opm_req *, int))loc_401F10)(a1: v11, a2: v12); break; case 8u: v7 = sub_40132C(a1: v6, a2: (int)v8, a3: v9, a4: v10); break; case 9u: v7 = opm_cmd09(ctx: v6, params: v8); break; default: v7 = 258; break; } } } v6->cmd_id = a2 | 0x80000000; v6->unk04 = v7; return 0; } } else { return dword_402BF4 + 10; } } return result; } /* ==== ANON size=260 ==== */ int __fastcall sub_401810(int a1) { unsigned int v2; // r0 int result; // r0 int *v4; // r1 int *v5; // r4 unsigned int v6; // r5 int v7; // r1 bool v8; // zf int v9; // [sp+4h] [bp-38h] BYREF int v10; // [sp+8h] [bp-34h] int v11; // [sp+Ch] [bp-30h] v2 = *(_DWORD *)(a1 + 16); if ( v2 > 1 ) return 561; v4 = (int *)(a1 + 9244); if ( v4 == nullptr ) return 264; v5 = v4; v6 = v2; opm_lib_zero_fill_words(result: &v9, a2: 0x28u); result = opm_sysdrv_rpc_200(); if ( result == 0 ) { if ( v6 == 1 ) { if ( (unsigned int)(v10 - 1) < 2 ) goto LABEL_14; v8 = v10 == 7; if ( v10 != 7 ) v8 = v10 == 4; if ( v8 && v11 == 1 ) LABEL_14: v7 = 6431; else v7 = 6340; } else { v7 = 3972; } *v5 = v7; } return result; } /* ==== ANON size=944 ==== */ int __fastcall sub_40132C(_DWORD *a1, int a2, int a3, int a4) { unsigned int v4; // r4 _DWORD *v5; // r10 int v7; // r7 int *v8; // r11 int *v9; // r10 int v10; // t1 __int64 v11; // r0 int v12; // r3 int v13; // r5 int v14; // r5 int v15; // r7 bool v16; // zf int *v17; // r0 _DWORD *v18; // r0 int v19; // t1 _DWORD *v20; // r2 int v21; // r1 int v22; // r0 int *v23; // r0 _DWORD *v24; // r0 int v25; // t1 _DWORD *v26; // r1 int v27; // r2 int *v28; // r0 int v29; // r1 int *v30; // r11 int v31; // r0 int *v32; // r11 int v33; // t1 int v34; // r1 bool v35; // zf int v36; // r1 bool v37; // zf int v38; // r0 int *v40; // r0 int v41; // r1 bool v42; // zf int v43; // [sp+Ch] [bp-1258h] BYREF int v44[4]; // [sp+10h] [bp-1254h] BYREF unsigned int v45[5]; // [sp+20h] [bp-1244h] BYREF int v46; // [sp+34h] [bp-1230h] int v47[1010]; // [sp+38h] [bp-122Ch] BYREF _DWORD v48[76]; // [sp+1010h] [bp-254h] BYREF int v49[71]; // [sp+1140h] [bp-124h] BYREF int v50; // [sp+125Ch] [bp-8h] v50 = dword_402E90; if ( a1 == nullptr ) goto LABEL_81; v4 = a1[4]; if ( v4 > 0x3F ) { v7 = 259; goto LABEL_82; } v8 = (int *)off_4022A8; if ( (*off_4022A8)[22 * v4] != 3 ) { v7 = 266; goto LABEL_82; } opm_memcpy_aligned(result: v44, a2: a1 + 6, a3: 0x1000u, a4); v9 = &v8[22 * v4]; v10 = v9[11]; v5 = v9 + 11; if ( v10 != v45[4] ) { v7 = 261; goto LABEL_82; } v7 = ((int (__fastcall *)(unsigned int, unsigned int *, int, int *))loc_4022AC)(a1: v4, a2: v45, a3: 4080, a4: v44); if ( v7 != 0 ) goto LABEL_82; if ( opm_memcmp_be(a1: (unsigned int *)dword_4016DC, a2: v45, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)dword_4016E0, a2: v45, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v45, a3: 0x10u) == 0 ) { if ( v46 != 16 ) goto LABEL_81; v15 = v47[0]; v14 = v47[1]; v16 = v47[0] == 32; if ( v47[0] != 32 ) v16 = v47[0] == 8; if ( v16 ) { if ( v8[22 * v4 + 1] != 1 ) goto LABEL_81; } else if ( v47[0] != 1 || v8[22 * v4 + 1] != 0 ) { goto LABEL_81; } if ( v47[1] >= 3u && v47[1] != 0x40000000 ) goto LABEL_81; if ( opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v45, a3: 0x10u) == 0 ) { LABEL_55: v7 = 640; goto LABEL_82; } v17 = &v8[22 * v4]; v17[19] = v15; v17[20] = v14; if ( (unsigned int)(v14 - 1) >= 2 ) { if ( v14 != 0 ) goto LABEL_81; v23 = &v8[22 * v4]; v25 = v23[18]; v24 = v23 + 18; if ( v25 != 1 ) goto LABEL_89; v26 = off_4017EC; v27 = *(_DWORD *)off_4017EC; if ( *(_DWORD *)off_4017EC != 0 ) { *v24 = 0; *v26 = v27 - 1; if ( v27 != 1 ) goto LABEL_89; goto LABEL_49; } } else { v19 = v17[18]; v18 = v17 + 18; if ( v19 != 0 ) goto LABEL_89; v20 = off_4017EC; v21 = *(_DWORD *)off_4017EC; if ( *(_DWORD *)off_4017EC <= 0x3Fu ) { *v18 = 1; *v20 = v21 + 1; if ( v21 != 0 ) goto LABEL_89; LABEL_49: v22 = opm_sysdrv_rpc_305(); LABEL_50: v7 = v22; goto LABEL_51; } } v7 = 265; goto LABEL_82; } if ( opm_memcmp_be(a1: (unsigned int *)dword_4016E8, a2: v45, a3: 0x10u) == 0 ) goto LABEL_89; LODWORD(v11) = opm_memcmp_be(a1: (unsigned int *)dword_4016EC, a2: v45, a3: 0x10u); if ( (_DWORD)v11 == 0 ) { v7 = 264; HIDWORD(v11) = v8[22 * v4 + 1]; if ( v11 != 0x100000000LL ) goto LABEL_82; if ( v46 != 4 || a1[1030] == 0 ) goto LABEL_81; v22 = opm_sysdrv_rpc_301(); goto LABEL_50; } if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F0, a2: v45, a3: 0x10u) == 0 ) goto LABEL_81; if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F4, a2: v45, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)dword_4016F8, a2: v45, a3: 0x10u) == 0 ) { v28 = off_401714; if ( off_401714[2] != 1 ) { *off_401714 = v4; v28[2] = 1; if ( v28[1] == 1 ) v29 = 0; else v29 = v8[22 * v4 + 15]; v28[3] = v29; goto LABEL_89; } if ( *off_401714 == v4 ) goto LABEL_89; goto LABEL_55; } v13 = opm_memcmp_be(a1: (unsigned int *)dword_4016FC, a2: v45, a3: 0x10u); if ( v13 != 0 && opm_memcmp_be(a1: (unsigned int *)dword_401700, a2: v45, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)dword_401704, a2: v45, a3: 0x10u) != 0 && opm_memcmp_be(a1: (unsigned int *)dword_401708, a2: v45, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: (unsigned int *)dword_40170C, a2: v45, a3: 0x10u) == 0 || opm_memcmp_be(a1: (unsigned int *)dword_401710, a2: v45, a3: 0x10u) == 0 ) { goto LABEL_85; } v7 = 263; goto LABEL_82; } v34 = off_401714[2]; v35 = v34 == 1; if ( v34 == 1 ) v35 = *off_401714 == v4; if ( !v35 || v46 == 8 ) goto LABEL_89; LABEL_81: v7 = 264; goto LABEL_82; } v30 = &v8[22 * v4]; v33 = v30[1]; v32 = v30 + 1; v31 = v33; if ( v33 == 1 ) { if ( v13 != 0 ) goto LABEL_81; } else if ( v31 != 0 || opm_memcmp_be(a1: (unsigned int *)dword_401700, a2: v45, a3: 0x10u) != 0 ) { goto LABEL_81; } if ( v46 != 280 ) goto LABEL_81; v7 = 264; v36 = off_401714[2]; v37 = v36 == 1; if ( v36 == 1 ) v37 = *off_401714 == v4; if ( !v37 ) goto LABEL_82; opm_memcpy_aligned(result: v49, a2: v47, a3: 0x118u, a4: v12); v7 = v49[68]; if ( v49[68] != 0 ) { if ( v49[68] == 16 ) { v4 = (unsigned int)v49; opm_asd301_path__h1(a1: (int)v49, a2: 256); opm_lib_zero_fill_words(result: v48, a2: 0x130u); v38 = *v32; v43 = 256; v7 = sub_4023B4(a1: v38, a2: (int)v49, a3: 256, a4: (int)v48, a5: &v43); if ( v7 == 0 ) opm_asd301_path__h1(a1: (int)v48, a2: v49[68]); } else { v7 = 264; } } LABEL_51: if ( v7 == 0 ) goto LABEL_89; LABEL_82: while ( dword_402E90 != v50 ) { ((void (__fastcall *)(int))loc_402E94)(a1: dword_402E90 - v50); LABEL_85: v40 = off_401714; v41 = off_401714[2]; v42 = v41 == 1; if ( v41 == 1 ) v42 = *off_401714 == v4; if ( v42 ) { off_401714[2] = 0; v40[3] = 0; *v40 = 65; } LABEL_89: v7 = 0; ++*v5; } return v7; } /* ==== ANON size=1038 ==== */ int __fastcall sub_401914( unsigned int *a1, int a2, unsigned int a3, int *a4, unsigned int a5, _DWORD *a6, int a7, int *a8) { _DWORD *v8; // r4 int *v9; // r5 __int16 *v10; // r8 _DWORD *v11; // r10 int result; // r0 int *v15; // r1 int *v16; // r9 _DWORD *v17; // r9 int v18; // t1 int v19; // r0 bool v20; // zf int v21; // r0 bool v22; // zf int v23; // r3 int v24; // r1 int *v25; // r1 int v26; // r1 int v27; // r0 int v28; // r0 int v29; // r2 int *v30; // r1 bool v31; // zf int v32; // r6 int v33; // r0 int v34; // [sp+18h] [bp-FE4h] int *v35; // [sp+20h] [bp-FDCh] BYREF unsigned int v36[1013]; // [sp+24h] [bp-FD8h] BYREF int v37; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401D24; v37 = *(_DWORD *)off_401D24; result = 264; if ( a2 != 16 ) goto LABEL_72; if ( a1 == nullptr ) goto LABEL_72; v9 = a4; if ( a4 == nullptr ) goto LABEL_72; v8 = a6; if ( a6 == nullptr || a8 == nullptr ) goto LABEL_72; if ( a3 > 0x3F ) { result = 259; goto LABEL_72; } v15 = (int *)off_401D28; v10 = (__int16 *)a7; *a8 = 0; v16 = &v15[22 * a3]; v18 = v16[1]; v17 = v16 + 1; v34 = v18; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D2C, a3: 0x10u) == 0 ) { if ( a7 != 72 ) goto LABEL_71; if ( v34 != 0 ) { *a8 = dword_401D80 + 6; goto LABEL_71; } goto LABEL_54; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D30, a3: 0x10u) == 0 ) { if ( a7 != 32 ) goto LABEL_71; v35 = nullptr; result = opm_sysdrv_rpc_102(); if ( result != 0 ) goto LABEL_72; v24 = -1; LABEL_38: a6[5] = v24; goto LABEL_72; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D34, a3: 0x10u) != 0 ) { v10 = (__int16 *)a5; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D38, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D3C, a3: 0x10u) == 0 ) goto LABEL_48; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D40, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D44, a3: 0x10u) == 0 ) goto LABEL_48; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D48, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D4C, a3: 0x10u) == 0 ) { if ( a7 == 32 ) { v9 = (int *)&v35; opm_lib_zero_fill_words(result: &v35, a2: 0x28u); a6[5] = 0; result = opm_sysdrv_rpc_200(); if ( result == 0 ) { v29 = dword_401D84; if ( (_BYTE)v35 == 0 ) v29 = 3; a6[5] = v29; } goto LABEL_72; } goto LABEL_71; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D50, a3: 0x10u) != 0 ) { if ( __PAIR64__(v34, opm_memcmp_be(a1, a2: (unsigned int *)dword_401D54, a3: 0x10u)) == 0x100000000LL || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D58, a3: 0x10u) | v34) == 0 ) { if ( a7 == 32 ) { a6[5] = 0; v8 = a6 + 5; v35 = nullptr; result = sub_402F84(a1: a6 + 5, a2: 0, a3: &v35, a4: 0); if ( result != 0 ) *a8 = dword_401D80; goto LABEL_72; } } else { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D5C, a3: 0x10u) == 0 ) { if ( a7 == 32 ) { a6[5] = 0; v35 = nullptr; opm_sysdrv_rpc_102(); result = 608; goto LABEL_72; } goto LABEL_71; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D60, a3: 0x10u) != 0 ) { v19 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D64, a3: 0x10u); v20 = v34 == 1; if ( v34 == 1 ) v20 = v19 == 0; if ( v20 || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D68, a3: 0x10u) | v34) == 0 ) goto LABEL_54; v21 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D6C, a3: 0x10u); v22 = v34 == 1; if ( v34 == 1 ) v22 = v21 == 0; if ( !v22 && (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D70, a3: 0x10u) | v34) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D74, a3: 0x10u) == 0 ) goto LABEL_74; result = 263; goto LABEL_72; } if ( a7 == 32 ) { v28 = 1; goto LABEL_53; } goto LABEL_71; } if ( a7 == 32 ) { v30 = (int *)off_401D28; a6[6] = 0; a6[7] = 0; v9 = &v30[22 * a3 + 16]; result = opm_sysdrv_rpc_107(); if ( result == 0 ) { *((_QWORD *)a6 + 3) = *(_QWORD *)v9; goto LABEL_54; } goto LABEL_72; } } LABEL_71: result = 264; goto LABEL_72; } LABEL_48: if ( a7 == 32 ) { result = 0; a6[5] = 0; goto LABEL_72; } goto LABEL_71; } LABEL_54: result = 0; goto LABEL_72; } v27 = 1; } else { v27 = 0; } result = opm_TA_InvokeCommandEntryPoint__h4( a1: a3, a2: v34, a3: (int)v9, a4: a5, a5: (int)a6, a6: a7, a7: a8, a8: v27); goto LABEL_72; } if ( a7 != 32 ) goto LABEL_71; v25 = (int *)off_401D28; a6[5] = 0; v35 = nullptr; v9 = &v25[22 * a3 + 13]; result = opm_sysdrv_rpc_105(); if ( result == 0 ) { if ( *v17 == 0 ) { v28 = a6[5] | 1; LABEL_53: a6[5] = v28; goto LABEL_54; } if ( *v17 != 1 ) { result = 260; goto LABEL_72; } result = opm_sysdrv_rpc_102(); if ( result == 0 ) { v26 = a6[5]; a6[5] = v26 | 8; if ( ((unsigned __int8)v35 & 2) != 0 && *off_401D88 != 0 ) { v24 = v26 | 0x28; goto LABEL_38; } } } LABEL_72: while ( *v11 != v37 ) { ((void (__fastcall *)(int, int))loc_402E94)(a1: result, a2: *v11 - v37); LABEL_74: v31 = v10 == (__int16 *)4056; if ( v10 == (__int16 *)4056 ) v31 = a7 == 20; result = 264; if ( v31 ) { v32 = 0; v8[4] = 0; sub_401058(result: (int *)&v35, a2: v9, a3: 0xFD8u, a4: v23); v9 = v35; v10 = off_401D78; while ( v32 != 56 ) { v33 = opm_memcmp_be(a1: (unsigned int *)&v10[v32], a2: v36, a3: (unsigned int)v9); v32 += 8; if ( v33 == 0 ) { v8[4] = dword_401D7C; goto LABEL_54; } } result = 688; } } return result; } /* ==== ANON size=1416 ==== */ int __fastcall sub_4023B4(int a1, int *a2, int a3, int *a4, _DWORD *a5) { int *v5; // r8 int *v6; // r9 _DWORD *v7; // r11 int *v8; // r10 int v10; // r4 int v11; // r3 int *v12; // r1 void (__fastcall *v13)(int *, int, unsigned int); // r4 int v15; // r0 int v16; // [sp+790h] [bp-1858h] BYREF int v17; // [sp+794h] [bp-1854h] int v18; // [sp+798h] [bp-1850h] int v19; // [sp+7F4h] [bp-17F4h] int v20; // [sp+7F8h] [bp-17F0h] int v21; // [sp+7FCh] [bp-17ECh] BYREF int v22[12]; // [sp+800h] [bp-17E8h] BYREF int v23; // [sp+830h] [bp-17B8h] BYREF int v24[64]; // [sp+834h] [bp-17B4h] BYREF int v25[435]; // [sp+934h] [bp-16B4h] BYREF _DWORD v26[64]; // [sp+1DD8h] [bp-210h] BYREF _DWORD v27[64]; // [sp+1ED8h] [bp-110h] BYREF int v28; // [sp+1FD8h] [bp-10h] v8 = off_402B10[0]; v28 = *off_402B10[0]; v10 = 264; if ( a2 == nullptr ) goto LABEL_88; if ( a3 != 256 ) goto LABEL_88; v5 = a4; if ( a4 == nullptr ) goto LABEL_88; v7 = a5; if ( a5 == nullptr ) goto LABEL_88; v6 = a2; v21 = 0; opm_lib_zero_fill_words(result: v27, a2: 0x100u); opm_lib_zero_fill_words(result: v26, a2: 0x100u); v20 = 0; v19 = 0; opm_lib_zero_fill_words(result: v22, a2: 0x1000u); if ( a1 == 0 ) { opm_lib_zero_fill_words(result: &v16, a2: 0x28u); v10 = opm_sysdrv_rpc_200(); if ( v10 == 0 ) { v10 = 272; switch ( v17 ) { case 1: goto LABEL_47; case 2: goto LABEL_52; case 3: v12 = (int *)off_402998; goto LABEL_76; case 4: if ( v18 == 2 ) v12 = (int *)off_4029AC; else LABEL_47: v12 = (int *)dword_4029A8; goto LABEL_76; case 5: v12 = (int *)off_4029A0; goto LABEL_76; case 6: v12 = (int *)off_402994; goto LABEL_76; case 7: if ( v18 == 2 ) v12 = (int *)off_4029A4; else LABEL_52: v12 = (int *)off_40299C; goto LABEL_76; case 8: v12 = (int *)off_40298C; goto LABEL_76; case 9: v12 = (int *)off_402964; goto LABEL_76; case 11: v12 = (int *)off_402990; goto LABEL_76; case 12: v12 = (int *)dword_402988; goto LABEL_76; case 15: v12 = (int *)off_402984; goto LABEL_76; case 16: v12 = (int *)off_402960; goto LABEL_76; case 17: v12 = (int *)off_402980; goto LABEL_76; case 18: if ( v18 == 2 ) v12 = (int *)off_40295C; else v12 = (int *)dword_402958; goto LABEL_76; case 19: v12 = (int *)off_40297C; goto LABEL_76; case 20: v12 = (int *)off_402978; goto LABEL_76; case 21: v12 = (int *)off_402954; goto LABEL_76; case 22: if ( v18 == 2 ) goto LABEL_67; v12 = (int *)off_40294C; goto LABEL_76; case 23: v12 = (int *)off_402950; goto LABEL_76; case 24: v12 = (int *)off_402970; goto LABEL_76; case 25: v12 = (int *)off_402974; goto LABEL_76; case 26: v12 = (int *)off_402940; goto LABEL_76; case 27: LABEL_67: v12 = (int *)off_402948; goto LABEL_76; case 28: v12 = (int *)off_402944; goto LABEL_76; case 29: v12 = (int *)off_40296C; goto LABEL_76; case 30: v12 = (int *)dword_402968; goto LABEL_76; case 31: v12 = (int *)off_40293C; LABEL_76: opm_memcpy_aligned(result: v22, a2: v12, a3: 0x4C0u, a4: v11); v10 = 0; break; default: break; } } LABEL_77: if ( v10 == 0 ) { v10 = opm_sysdrv_rpc_201(); if ( v10 == 0 ) { if ( v22[9] == 2048 ) { v13 = (void (__fastcall *)(int *, int, unsigned int))off_402A24; off_402A24(a1: &v23, a2: &v21, a3: 3); v13(a1: v24, a2: (int)v27, a3: 0x100u); v13(a1: v25, a2: (int)v26, a3: 0x100u); opm_lib_zero_fill_words(result: v22, a2: 0x4C0u); if ( opm_sysdrv_rpc_30() == 0 ) goto LABEL_91; v10 = 1296; goto LABEL_84; } v10 = 272; } } goto LABEL_83; } if ( a1 == 1 ) { opm_lib_zero_fill_words(result: &v16, a2: 0x28u); v10 = opm_sysdrv_rpc_200(); if ( v10 == 0 ) { v10 = 272; switch ( v17 ) { case 1: goto LABEL_16; case 2: goto LABEL_21; case 3: v12 = (int *)off_402A0C; goto LABEL_76; case 4: if ( v18 == 2 ) v12 = (int *)dword_402A20; else LABEL_16: v12 = (int *)off_402A1C; goto LABEL_76; case 5: v12 = (int *)off_402A14; goto LABEL_76; case 6: v12 = (int *)off_402A08; goto LABEL_76; case 7: if ( v18 == 2 ) v12 = (int *)off_402A18; else LABEL_21: v12 = (int *)off_402A10; goto LABEL_76; case 8: v12 = (int *)dword_402A00; goto LABEL_76; case 9: v12 = (int *)off_4029D8; goto LABEL_76; case 11: v12 = (int *)off_402A04; goto LABEL_76; case 12: v12 = (int *)off_4029FC; goto LABEL_76; case 15: v12 = (int *)dword_4029F8; goto LABEL_76; case 16: v12 = (int *)off_4029D4; goto LABEL_76; case 17: v12 = (int *)off_4029F4; goto LABEL_76; case 18: if ( v18 == 2 ) v12 = (int *)off_4029D0; else v12 = (int *)dword_4029CC; goto LABEL_76; case 19: v12 = (int *)off_4029F0; goto LABEL_76; case 20: v12 = (int *)off_4029EC; goto LABEL_76; case 21: v12 = (int *)off_4029C8; goto LABEL_76; case 22: if ( v18 == 2 ) goto LABEL_36; v12 = (int *)off_4029C0; goto LABEL_76; case 23: v12 = (int *)dword_4029C4; goto LABEL_76; case 24: v12 = (int *)off_4029E4; goto LABEL_76; case 25: v12 = (int *)off_4029E8; goto LABEL_76; case 26: v12 = (int *)off_4029B4; goto LABEL_76; case 27: LABEL_36: v12 = (int *)off_4029BC; goto LABEL_76; case 28: v12 = (int *)off_4029B8; goto LABEL_76; case 29: v12 = (int *)off_4029E0; goto LABEL_76; case 30: v12 = (int *)dword_4029DC; goto LABEL_76; case 31: v12 = (int *)off_4029B0; goto LABEL_76; default: goto LABEL_77; } } goto LABEL_77; } v10 = 260; LABEL_83: opm_lib_zero_fill_words(result: v22, a2: 0x4C0u); while ( 1 ) { LABEL_84: if ( v20 != 0 ) opm_sysdrv_rpc_2(); if ( v19 != 0 ) opm_sysdrv_rpc_31(); LABEL_88: if ( *v8 == v28 ) return v10; ((void (__fastcall *)(int))loc_402E94)(a1: *v8 - v28); LABEL_91: STACK[0x2798] = 3; STACK[0x2794] = (unsigned int)&STACK[0x27FC]; STACK[0x27A0] = (unsigned int)&STACK[0x3ED8]; STACK[0x27AC] = (unsigned int)&STACK[0x3DD8]; STACK[0x279C] = dword_402A2C; v15 = dword_402A30; STACK[0x27A8] = dword_402A30; STACK[0x27A4] = 256; STACK[0x27B0] = 256; STACK[0x2790] = v15 + 256; if ( a1 == 1 ) { if ( opm_sysdrv_rpc_33() != 0 ) goto LABEL_98; if ( opm_sysdrv_rpc_1() != 0 ) goto LABEL_100; if ( opm_sysdrv_rpc_3() != 0 ) goto LABEL_104; STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() != 0 ) goto LABEL_106; LABEL_108: v10 = 0; *v7 = STACK[0x278C]; } else { sub_4012CC(a1: v6, a2: (int)v6, a3: 0x100u); if ( opm_sysdrv_rpc_33() != 0 ) { LABEL_98: v10 = 1297; } else if ( opm_sysdrv_rpc_1() != 0 ) { LABEL_100: v10 = 1298; } else if ( opm_sysdrv_rpc_3() != 0 ) { LABEL_104: v10 = 1299; } else { STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() == 0 ) { sub_4012CC(a1: v5, a2: (int)v5, a3: STACK[0x278C]); goto LABEL_108; } LABEL_106: v10 = 1300; } } } }