Newer
Older
AMI-Aptio-BIOS-Reversed / Build / GuidArtifacts / 4A43824B-4AA0-4F7F-9A4B-0C2102191361 / 4A43824B-4AA0-4F7F-9A4B-0C2102191361.c
@Ajax Dong Ajax Dong 2 days ago 181 KB Full restructure
/*
 *4A43824B-4AA0-4F7F-9A4B-0C2102191361.c
 *4A43824B-4AA0-4F7F-9A4B-0C2102191361 PEI module decompiled from IDA
 */

#include "4A43824B-4AA0-4F7F-9A4B-0C2102191361.h"

// RtkUsbUndiUnload @ 0x2a0
// attributes: thunk __int64 RtkUsbUndiUnload(__int64 a1)
{
 return RtkUsbUndiStopChildren(a1);
}

// _ModuleEntryPoint @ 0x2a8 EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
 double Status; // xmm3_8 EFI_BOOT_SERVICES *BootServices; // r9 __int64 Protocol; // rax __int64 v7; // rdx __int64 v8; // r8 __int64 v10; // [rsp+30h] [rbp+8h] BYREF qword_E300 = (__int64)ImageHandle; /*0x2b8*/
 if ( !ImageHandle ) /*0x2c2*/
 RtkUsbUndiAssert( /*0x2d5*/
 (__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
 51,
 (__int64)aGimagehandleVo, // "gImageHandle != ((void *) 0)"
 Status); // "gImageHandle != ((void *) 0)"
 qword_E2F0 = (__int64)SystemTable; /*0x2da*/
 if ( !SystemTable ) /*0x2e4*/
 RtkUsbUndiAssert( /*0x2f7*/
 (__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
 57,
 (__int64)aGstVoid0, // "gST != ((void *) 0)"
 Status); // "gST != ((void *) 0)"
 BootServices = SystemTable->BootServices; /*0x2fc*/
 qword_E2F8 = (__int64)BootServices; /*0x300*/
 if ( !BootServices ) /*0x30a*/
 {
 RtkUsbUndiAssert( /*0x31e*/
 (__int64)aFUefiEdk2Mdepk, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c"
 63,
 (__int64)aGbsVoid0, // "gBS != ((void *) 0)"
 Status); // "gBS != ((void *) 0)"
 BootServices = (EFI_BOOT_SERVICES *)qword_E2F8; /*0x323*/
 }
 qword_E308 = (__int64)SystemTable->RuntimeServices; /*0x32e*/
 if ( !qword_E308 ) /*0x338*/
 {
 RtkUsbUndiAssert( /*0x34b*/
 (__int64)aFUefiEdk2Mdepk_0, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c"
 47,
 (__int64)aGrtVoid0, // "gRT != ((void *) 0)"
 Status); // "gRT != ((void *) 0)"
 BootServices = (EFI_BOOT_SERVICES *)qword_E2F8; /*0x350*/
 }
 Protocol = ((__int64 ( *)(EFI_HANDLE, void *, __int64 *))BootServices->HandleProtocol)( /*0x366*/
 ImageHandle,
 &unk_BB00,
 &v10);
 if ( Protocol < 0 ) /*0x370*/
 {
 RtkUsbUndiDebugPrint( /*0x381*/
 0x80000000,
 nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
 Protocol);
 RtkUsbUndiAssert( /*0x399*/
 (__int64)aFUefiEdk2Mdepk_1, // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDriverEntryPoint\\DriverEntryPoint.c"
 126,
 (__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
 Status); // "!EFI_ERROR (Status)"
 }
 *(_QWORD *)(v10 + 88) = RtkUsbUndiUnload; /*0x3aa*/
 return RtkUsbUndiDriverEntryPoint((__int64)ImageHandle, v7, v8, Status); /*0x3bb*/
}

// RtkUsbUndiDriverEntryPoint @ 0x3c4 __int64 RtkUsbUndiDriverEntryPoint(__int64 ImageHandle, __int64 a2, __int64 a3, double a4)
{
 __int64 v4; // rax __int64 Result; // rbx MEMORY[0xBBA0] = ImageHandle; /*0x3d1*/
 MEMORY[0xBBA8] = ImageHandle; /*0x3d8*/
 v4 = (*(__int64 ( **)(__int64 *, void *, __int64 ( **)(), _QWORD))(qword_E2F8 + 328))( /*0x3f7*/
 &MEMORY[0xBBA8],
 &unk_BB60,
 off_BB80,
 0);
 Result = v4; /*0x3fd*/
 if ( v4 >= 0 ) /*0x403*/
 return (*(__int64 ( **)(__int64 *, void *, __int64 ( **)(), void *, __int64 ( **)(), void *, _QWORD, _QWORD))(qword_E2F8 + 328))( /*0x486*/
 &MEMORY[0xBBA8],
 &unk_BB70,
 &off_BD10,
 &unk_BB10,
 &off_BD28,
 &unk_BB30,
 &off_CE68,
 0);
 RtkUsbUndiDebugPrint( /*0x414*/
 0x80000000,
 nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
 v4);
 RtkUsbUndiAssert( /*0x42c*/
 (__int64)MEMORY[0xDAC0], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiDriverModel.c"
 68,
 (__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
 a4); // "!EFI_ERROR (Status)"
 return Result; /*0x48c*/
}

// RtkUsbUndiDriverBindingSupported @ 0x494 __int64 RtkUsbUndiDriverBindingSupported(__int64 a1, __int64 a2, __int64 a3, double a4)
{
 unsigned __int8 Index; // si __int64 result; // rax __int64 v8; // r8 __int64 Result; // rbx __int64 v10; // [rsp+30h] [rbp-28h] BYREF _BYTE v11[8]; // [rsp+38h] [rbp-20h] BYREF __int16 v12; // [rsp+40h] [rbp-18h]
 __int16 v13; // [rsp+42h] [rbp-16h]
 __int64 i; // [rsp+78h] [rbp+20h] BYREF Index = 0; /*0x4c3*/
 result = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 6, &i); /*0x4c6*/
 if ( result >= 0 ) /*0x4cc*/
 {
 RtkUsbUndiZeroMem(i, 6u, v8, a4); /*0x4d9*/
 result = (*(__int64 ( **)(__int64, void *, _QWORD, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x503*/
 a2,
 &unk_BB40,
 0,
 *(_QWORD *)(a1 + 40),
 a2,
 4);
 if ( result >= 0 ) /*0x50c*/
 {
 result = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x539*/
 a2,
 &unk_BB50,
 &v10,
 *(_QWORD *)(a1 + 40),
 a2,
 16);
 if ( result >= 0 ) /*0x542*/
 {
 Result = (*(__int64 ( **)(__int64, _BYTE *))(v10 + 48))(v10, v11); /*0x558*/
 if ( Result >= 0 ) /*0x55e*/
 {
 Result = 0x8000000000000003uLL; /*0x56a*/
 while ( v12 != *((_WORD *)&unk_BBB0 + 8 *Index) || v13 != *((_WORD *)&unk_BBB0 + 8 *Index + 1) ) /*0x58f*/
 {
 if ( *((_WORD *)&unk_BBB0 + 8 *Index) == 0xFFFF ) /*0x59c*/
 goto LABEL_11; /*0x59c*/
 ++Index; /*0x59e*/
 }
 Result = 0; /*0x5aa*/
 *(_WORD *)(i + 4) = *((_WORD *)&unk_BBB0 + 8 *Index + 2); /*0x5b7*/
 }
LABEL_11:
 (*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0x5bb*/
 a2,
 &unk_BB50,
 *(_QWORD *)(a1 + 40),
 a2);
 return Result; /*0x5d9*/
 }
 }
 }
 return result; /*0x5eb*/
}

// RtkUsbUndiDriverBindingStart @ 0x5f4 __int64 RtkUsbUndiDriverBindingStart(__int64 a1, __int64 controllerHandle_1, __int64 a3, double a4)
{
 __int64 result; // rax __int64 inited; // rbx __int64 zeroArg1; // r8 __int64 i_3; // rcx __int64 zeroArg2; // r8 __int16 checksumLen; // ax char checksumVal; // dl _BYTE *i; // r8 __int64 i_4; // rcx __int64 spinArg; // r8 __int64 protoInterface; // rcx __int64 protoOut; // [rsp+40h] [rbp-10h] BYREF __int64 protoOut2; // [rsp+48h] [rbp-8h] BYREF __int64 i_1; // [rsp+80h] [rbp+30h] BYREF __int64 controllerHandle; // [rsp+88h] [rbp+38h] BYREF __int64 i_2; // [rsp+98h] [rbp+48h] BYREF controllerHandle = controllerHandle_1; /*0x5f4*/
 result = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x632*/
 controllerHandle_1,
 &unk_BB50,
 &protoOut2,
 *(_QWORD *)(a1 + 40),
 controllerHandle_1,
 16);
 if ( result >= 0 ) /*0x63d*/
 {
 inited = (*(__int64 ( **)(__int64, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0x670*/
 controllerHandle,
 &unk_BB40,
 &protoOut,
 *(_QWORD *)(a1 + 40),
 controllerHandle,
 16);
 if ( inited < 0 ) /*0x676*/
 {
LABEL_26:
 (*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xaac*/
 controllerHandle,
 &unk_BB50,
 *(_QWORD *)(a1 + 40),
 controllerHandle);
 return inited; /*0xacb*/
 }
 inited = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 5896, &i_1); /*0x696*/
 if ( inited < 0 ) /*0x69c*/
 {
LABEL_25:
 (*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xa8d*/
 controllerHandle,
 &unk_BB40,
 *(_QWORD *)(a1 + 40),
 controllerHandle);
 goto LABEL_26; /*0xaa6*/
 }
 RtkUsbUndiZeroMem(i_1, 0x1708u, zeroArg1, a4); /*0x6a9*/
 i_3 = MEMORY[0xE2E8]; /*0x6ae*/
 i_2 = 0; /*0x6b5*/
 if ( !MEMORY[0xE2E8] ) /*0x6bc*/
 {
 inited = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 96, &i_2); /*0x6da*/
 if ( inited < 0 ) /*0x6e0*/
 {
LABEL_24:
 (*(void ( **)(__int64))(qword_E2F8 + 72))(i_1); /*0xa7f*/
 goto LABEL_25; /*0xa8a*/
 }
 RtkUsbUndiZeroMem(i_2, 0x60u, zeroArg2, a4); /*0x6ed*/
 i_3 = i_2; /*0x6f2*/
 if ( (i_2 & 0xF) != 0 ) /*0x6f9*/
 i_3 = i_2 + 8; /*0x6fb*/
 *(_DWORD *)(i_3 + 4) = 131104; /*0x6ff*/
 *(_DWORD *)i_3 = 1163415585; /*0x70d*/
 *(_QWORD *)(i_3 + 16) = RtkUsbUndiInterruptCallback; /*0x713*/
 *(_WORD *)(i_3 + 8) = 4099; /*0x717*/
 *(_BYTE *)(i_3 + 11) = 0; /*0x71d*/
 *(_DWORD *)(i_3 + 12) = 1073792506; /*0x721*/
 *(_DWORD *)(i_3 + 24) = 0x1000000; /*0x728*/
 *(_DWORD *)(i_3 + 28) = 1380533072; /*0x72f*/
 checksumLen = *(unsigned __int8 *)(i_3 + 4); /*0x736*/
 MEMORY[0xE2E8] = i_3; /*0x73a*/
 checksumVal = 0; /*0x741*/
 for ( i = (_BYTE *)i_3; checksumLen; --checksumLen ) /*0x74a*/
 checksumVal += *i++; /*0x74c*/
 *(_BYTE *)(i_3 + 5) -= checksumVal; /*0x75e*/
 }
 *(_QWORD *)(i_1 + 368) = i_3; /*0x765*/
 *(_WORD *)(i_1 + 396) = *(unsigned __int8 *)(i_3 + 7); /*0x774*/
 RtkUsbUndiInitSpinlock2(i_1 + 424); /*0x786*/
 *(_QWORD *)(i_1 + 16) = *(_QWORD *)(a1 + 40); /*0x793*/
 *(_QWORD *)(i_1 + 8) = controllerHandle; /*0x79f*/
 *(_QWORD *)(i_1 + 24) = protoOut; /*0x7ab*/
 *(_BYTE *)(i_1 + 346) = 0; /*0x7ba*/
 *(_QWORD *)(i_1 + 5296) = protoOut2; /*0x7c9*/
 i_4 = i_1; /*0x7d0*/
 qword_E920[*(unsigned __int16 *)(i_1 + 396)] = i_1; /*0x7db*/
 *(_QWORD *)(i_4 + 408) = protoOut; /*0x7e3*/
 inited = RtkUsbUndiInitSpinlock(i_1 + 424, (__int64)qword_E920, spinArg, a4); /*0x7fa*/
 if ( !inited ) /*0x800*/
 {
 inited = RtkUsbUndiInitHardware((_QWORD *)(i_1 + 416), *(_BYTE **)(i_1 + 408), i_1 + 424, a4); /*0x824*/
 *(_BYTE *)(i_1 + 5812) = 0; /*0x82b*/
 if ( inited >= 0 ) /*0x835*/
 {
 inited = RtkUsbUndiInitPhy(i_1 + 424); /*0x84b*/
 if ( inited >= 0 ) /*0x851*/
 {
 RtkUsbUndiSetupInterrupt(i_1); /*0x85b*/
 *(_DWORD *)(i_1 + 4936) = 1; /*0x86b*/
 *(_BYTE *)(i_1 + 4944) = 0; /*0x87c*/
 *(_QWORD *)i_1 = 1768189557; /*0x88a*/
 *(_QWORD *)(i_1 + 360) = 65537; /*0x895*/
 *(_BYTE *)(i_1 + 392) = 1; /*0x8a4*/
 *(_BYTE *)(i_1 + 393) = 3; /*0x8af*/
 *(_BYTE *)(i_1 + 394) = 16; /*0x8ba*/
 *(_DWORD *)(i_1 + 384) = 0; /*0x8c5*/
 *(_QWORD *)(i_1 + 376) = 0; /*0x8cf*/
 *(_BYTE *)(i_1 + 395) = 1; /*0x8da*/
 *(_BYTE *)(i_1 + 388) = 85; /*0x8e5*/
 *(_BYTE *)(i_1 + 389) = 78; /*0x8f0*/
 *(_BYTE *)(i_1 + 390) = 68; /*0x8fb*/
 *(_BYTE *)(i_1 + 391) = 73; /*0x906*/
 *(_QWORD *)(i_1 + 400) = 0; /*0x911*/
 *(_QWORD *)(i_1 + 5888) = i_1 + 360; /*0x923*/
 inited = (*(__int64 ( **)(__int64 *, void *, __int64, _QWORD))(qword_E2F8 + 328))( /*0x946*/
 &controllerHandle,
 &unk_BD00,
 i_1 + 5888,
 0);
 if ( inited >= 0 ) /*0x94c*/
 {
 inited = (*(__int64 ( **)(__int64, void *, __int64, void *, _QWORD, void *, __int64, _QWORD))(qword_E2F8 + 328))( /*0x9a1*/
 i_1 + 400,
 &unk_BB20,
 i_1 + 360,
 &unk_BB40,
 *(_QWORD *)(i_1 + 416),
 &unk_BD00,
 i_1 + 5888,
 0);
 if ( inited >= 0 ) /*0x9a7*/
 {
 if ( qword_E2E0 ) /*0x9b7*/
 inited = (*(__int64 (**)(void))(qword_E2F8 + 72))(); /*0x9c3*/
 if ( inited >= 0 ) /*0x9c9*/
 {
 if ( (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))( /*0x9fb*/
 4,
 16LL * *(unsigned __int8 *)(MEMORY[0xE2E8] + 7) + 8,
 &qword_E2E0) >= 0 )
 {
 (*(void ( **)(__int64, void *, __int64 *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xb07*/
 controllerHandle,
 &unk_BB50,
 &protoOut2,
 *(_QWORD *)(a1 + 40),
 *(_QWORD *)(i_1 + 400),
 8);
 return 0; /*0xb0d*/
 }
 inited = (*(__int64 ( **)(__int64, void *, __int64, void *, _QWORD, _QWORD))(qword_E2F8 + 336))( /*0xa3b*/
 i_1 + 400,
 &unk_BB20,
 i_1 + 360,
 &unk_BB40,
 *(_QWORD *)(i_1 + 416),
 0);
 }
 }
 }
 protoInterface = *(_QWORD *)(i_1 + 416); /*0xa50*/
 qword_E920[*(unsigned __int16 *)(i_1 + 396)] = 0; /*0xa57*/
 (*(void ( **)(__int64))(qword_E2F8 + 72))(protoInterface); /*0xa62*/
 }
 }
 }
 RtkUsbUndiInitSpinlock2(0); /*0xa67*/
 if ( i_2 ) /*0xa73*/
 (*(void (**)(void))(qword_E2F8 + 72))(); /*0xa7c*/
 goto LABEL_24; /*0xa7c*/
 }
 return result; /*0xace*/
}

// RtkUsbUndiDriverBindingStop @ 0xb14 __int64 RtkUsbUndiDriverBindingStop(__int64 a1, __int64 a2, unsigned __int64 a3, __int64 a4)
{
 double v4; // xmm3_8 unsigned __int64 Index; // rsi char v11; // r12 __int64 v12; // rbx __int64 v13; // r13 _BYTE v14[16]; // [rsp+40h] [rbp-38h] BYREF __int64 v15; // [rsp+90h] [rbp+18h] BYREF if ( !a3 ) /*0xb3f*/
 {
 RtkUsbUndiInitSpinlock2(0); /*0xb43*/
 (*(void ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xb60*/
 a2,
 &unk_BB40,
 *(_QWORD *)(a1 + 40),
 a2);
 return (*(__int64 ( **)(__int64, void *, _QWORD, __int64))(qword_E2F8 + 288))( /*0xb84*/
 a2,
 &unk_BB50,
 *(_QWORD *)(a1 + 40),
 a2);
 }
 Index = 0; /*0xb89*/
 v11 = 1; /*0xb8b*/
 do /*0xda7*/
 {
 if ( (*(__int64 ( **)(_QWORD, void *, __int64 *, _QWORD, __int64, int))(qword_E2F8 + 280))( /*0xbcb*/
 *(_QWORD *)(a4 + 8 *Index),
 &unk_BB20,
 &v15,
 *(_QWORD *)(a1 + 40),
 a2,
 2) < 0 )
 goto LABEL_15; /*0xbcb*/
 v12 = v15 - 360; /*0xbd9*/
 if ( *(_QWORD *)(v15 - 360) != 1768189557 ) /*0xbe7*/
 {
 RtkUsbUndiAssert( /*0xbfc*/
 (__int64)MEMORY[0xD328], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\Init.c"
 756,
 (__int64)MEMORY[0xD310], // "CR has Bad Signature"
 v4); // "CR has Bad Signature"
 v12 = v15; /*0xc01*/
 }
 (*(void ( **)(__int64, void *, _QWORD, _QWORD))(qword_E2F8 + 288))( /*0xc22*/
 a2,
 &unk_BB50,
 *(_QWORD *)(a1 + 40),
 *(_QWORD *)(a4 + 8 *Index));
 if ( (*(__int64 ( **)(_QWORD, void *, _QWORD, void *, __int64, void *, __int64, _QWORD))(qword_E2F8 + 336))( /*0xc7e*/
 *(_QWORD *)(a4 + 8 *Index),
 &unk_BB40,
 *(_QWORD *)(v12 + 416),
 &unk_BB20,
 v12 + 360,
 &unk_BD00,
 v12 + 5888,
 0) < 0 )
 {
 (*(void ( **)(__int64, void *, _BYTE *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xca8*/
 a2,
 &unk_BB50,
 v14,
 *(_QWORD *)(a1 + 40),
 *(_QWORD *)(a4 + 8 *Index),
 8);
 goto LABEL_16; /*0xcae*/
 }
 v13 = (*(__int64 ( **)(__int64, void *, __int64, _QWORD))(qword_E2F8 + 336))(a2, &unk_BD00, v12 + 5888, 0); /*0xccd*/
 if ( v13 >= 0 ) /*0xcd3*/
 {
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 528)); /*0xd1a*/
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 536)); /*0xd2b*/
 if ( *(_BYTE *)(v12 + 5850) ) /*0xd2e*/
 {
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 568)); /*0xd45*/
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 576)); /*0xd56*/
 }
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 544)); /*0xd67*/
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 560)); /*0xd78*/
 (*(void ( **)(_QWORD))(qword_E2F8 + 72))(*(_QWORD *)(v12 + 416)); /*0xd89*/
 (*(void ( **)(__int64))(qword_E2F8 + 72))(v12); /*0xd96*/
 }
 else
 {
 (*(void ( **)(__int64, void *, _BYTE *, _QWORD, _QWORD, int))(qword_E2F8 + 280))( /*0xd00*/
 a2,
 &unk_BB50,
 v14,
 *(_QWORD *)(a1 + 40),
 *(_QWORD *)(a4 + 8 *Index),
 8);
 }
 if ( v13 < 0 ) /*0xd9c*/
LABEL_15:
 v11 = 0; /*0xd9e*/
LABEL_16:
 ++Index; /*0xda1*/
 }
 while ( Index < a3 ); /*0xda7*/
 if ( v11 ) /*0xdb0*/
 return 0; /*0xdbe*/
 else return 0x8000000000000007uLL; /*0xdb2*/
}

// RtkUsbUndiStallHelper @ 0xde0 __int64 RtkUsbUndiStallHelper(__int64 a1, unsigned int a2)
{
 return (*(__int64 ( **)(_QWORD))(qword_E2F8 + 248))(a2);
}

// RtkUsbUndiInitHardware @ 0xdf0 signed __int64 RtkUsbUndiInitHardware(_QWORD *a1, _BYTE *i, __int64 n0x8000, double a4)
{
 __int16 v6; // ax int n24592; // eax int n20480; // ecx __int64 v10; // rdx __int64 v11; // r8 __int64 v12; // rdx __int64 v13; // r8 signed __int64 result; // rax __int64 v15; // r8 __int64 v16; // rdx __int64 v17; // r8 _BYTE *i_1; // rbx _BYTE *j; // rcx __int64 v20; // rdx __int64 v21; // r8 unsigned __int16 Index; // di _BYTE *v23; // rcx _BYTE ia[32]; // [rsp+40h] [rbp-29h] BYREF int i_; // [rsp+60h] [rbp-9h] BYREF char v26; // [rsp+64h] [rbp-5h] BYREF unsigned int n24592_1; // [rsp+E0h] [rbp+77h] BYREF _BYTE *v28; // [rsp+E8h] [rbp+7Fh] BYREF

 *(_QWORD *)(n0x8000 + 4928) = RtkUsbUndiStallHelper; /*0xe19*/
 *(_WORD *)(n0x8000 + 80) = *(_WORD *)(n0x8000 + 5114); /*0xe2b*/
 v6 = *(_WORD *)(n0x8000 + 5116); /*0xe30*/
 *(_QWORD *)(n0x8000 + 4936) = 0; /*0xe43*/
 *(_WORD *)(n0x8000 + 82) = v6; /*0xe4a*/
 *(_QWORD *)(n0x8000 + 4944) = 0; /*0xe4f*/
 *(_QWORD *)(n0x8000 + 4960) = 0; /*0xe56*/
 *(_QWORD *)(n0x8000 + 4968) = 0; /*0xe5d*/
 *(_QWORD *)(n0x8000 + 4976) = 0; /*0xe64*/
 *(_QWORD *)(n0x8000 + 4952) = 0; /*0xe6b*/
 *(_BYTE *)(n0x8000 + 4498) = 49; /*0xe72*/
 *(_QWORD *)(n0x8000 + 4864) = n0x8000; /*0xe7a*/
 RtkUsbUndiZeroMem((__int64)ia, 0x20u, n0x8000, a4); /*0xe81*/
 *(_DWORD *)(n0x8000 + 5000) = 0; /*0xeb0*/
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &n24592_1, 2) < 0 ) /*0xebf*/
 return 0x8000000000000007uLL; /*0xebf*/
 n24592 = HIWORD(n24592_1) & 0x7CF0; /*0xecd*/
 n20480 = HIWORD(n24592_1) & 0x7000; /*0xed2*/
 n24592_1 = n24592; /*0xed8*/
 switch ( n24592 ) /*0xee0*/
 {
 case 19456: /*0xee0*/
 *(_DWORD *)(n0x8000 + 5000) = 2; /*0xee2*/
 break;
 case 19472: /*0xee0*/
 *(_DWORD *)(n0x8000 + 5000) = 3; /*0xef2*/
 break;
 case 18432: /*0xee0*/
 *(_DWORD *)(n0x8000 + 5000) = 4; /*0xf05*/
 break;
 }
 if ( n20480 == 20480 ) /*0xf17*/
 {
 switch ( n24592 ) /*0xf1e*/
 {
 case 23552: /*0xf1e*/
 *(_DWORD *)(n0x8000 + 5000) = 6; /*0xf20*/
 goto LABEL_21; /*0xf26*/
 case 23568: /*0xf1e*/
 *(_DWORD *)(n0x8000 + 5000) = 7; /*0xf2f*/
 goto LABEL_21; /*0xf39*/
 case 23584: /*0xf1e*/
 *(_DWORD *)(n0x8000 + 5000) = 8; /*0xf42*/
 goto LABEL_21; /*0xf4c*/
 case 23600: /*0xf1e*/
 *(_DWORD *)(n0x8000 + 5000) = 9; /*0xf55*/
 break;
 }
 }
 if ( n24592 == 24576 ) /*0xf64*/
 {
 *(_DWORD *)(n0x8000 + 5000) = 10; /*0xf66*/
 }
 else if ( n24592 == 24592 ) /*0xf77*/
 {
 *(_DWORD *)(n0x8000 + 5000) = 11; /*0xf79*/
 }
LABEL_21:
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55320, 0, 0, &n24592_1, 2); /*0xf83*/
 *(_WORD *)(n0x8000 + 5004) = HIWORD(n24592_1) & 0xFEF0; /*0xfb8*/
 if ( !*(_DWORD *)(n0x8000 + 5000) ) /*0xfc6*/
 return 0x8000000000000007uLL; /*0x10dc*/
 RtkUsbUndiNicTypeInit(n0x8000); /*0xfcf*/
 RtkUsbUndiPhyReset(n0x8000, v10, v11, a4); /*0xfd7*/
 if ( *(_BYTE *)(n0x8000 + 5427) == 1 ) /*0xfe3*/
 *(_BYTE *)(n0x8000 + 5447) = RtkUsbUndiGetMacFromAcpi(n0x8000, v12, v13, a4); /*0xfed*/
 result = RtkUsbUndiPhyGetStatus(n0x8000); /*0xff6*/
 if ( result >= 0 ) /*0xffe*/
 {
 RtkUsbUndiCopyMem(ia, (_BYTE *)(n0x8000 + 252), 6, a4); /*0x1012*/
 *(_QWORD *)(n0x8000 + 4928) = 0; /*0x1024*/
 *(_QWORD *)(n0x8000 + 4952) = 0; /*0x102b*/
 RtkUsbUndiZeroMem((__int64)&i_, 0x25u, v15, a4); /*0x1032*/
 RtkUsbUndiCopyMem(&v26, ia, 32, a4); /*0x1044*/
 i_ = 2427651; /*0x1049*/
 i_1 = i; /*0x1050*/
 for ( j = i; !RtkUsbUndiAsciiStrToUint64((__int64)j, v16, v17, a4); j = i_1 ) /*0x1053*/
 i_1 = (_BYTE *)RtkUsbUndiHexChar((__int64)i_1, v20, v21, a4); /*0x1060*/
 Index = (_WORD)i_1 - (_WORD)i; /*0x1079*/
 result = (*(__int64 ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))( /*0x1089*/
 4,
 (unsigned __int16)((_WORD)i_1 - (_WORD)i + 41),
 &v28);
 if ( !result ) /*0x108f*/
 {
 v23 = v28; /*0x1091*/
 *a1 = v28; /*0x1098*/
 if ( Index ) /*0x109e*/
 {
 RtkUsbUndiCopyMem(v23, i, Index, a4); /*0x10a6*/
 v23 = v28; /*0x10ab*/
 }
 v28 = &v23[Index]; /*0x10b9*/
 RtkUsbUndiCopyMem(v28, &i_, 37, a4); /*0x10bd*/
 v28 += 37; /*0x10cf*/
 RtkUsbUndiCopyMem(v28, i_1, 4, a4); /*0x10d3*/
 return 0; /*0x10d8*/
 }
 }
 return result; /*0x10ee*/
}

// RtkUsbUndiStopChildren @ 0x1104 __int64 RtkUsbUndiStopChildren(__int64 a1)
{
 __int64 result; // rax unsigned __int64 i_3; // rax unsigned __int64 i; // rbx unsigned __int64 i_2; // rbx __int64 v6; // [rsp+30h] [rbp-20h] BYREF __int64 v7; // [rsp+38h] [rbp-18h] BYREF __int64 v8; // [rsp+40h] [rbp-10h] BYREF __int64 v9; // [rsp+78h] [rbp+28h] BYREF unsigned __int64 i_1; // [rsp+80h] [rbp+30h] BYREF __int64 v11; // [rsp+88h] [rbp+38h] BYREF result = (*(__int64 ( **)(_QWORD, _QWORD, _QWORD, unsigned __int64 *, __int64 *))(qword_E2F8 + 312))( /*0x112d*/
 0,
 0,
 0,
 &i_1,
 &v9);
 if ( result >= 0 ) /*0x1136*/
 {
 i_3 = i_1; /*0x113c*/
 for ( i = 0; i < i_1; ++i ) /*0x1145*/
 {
 (*(void ( **)(_QWORD, __int64, _QWORD))(qword_E2F8 + 272))(*(_QWORD *)(v9 + 8 *i), a1, 0); /*0x115c*/
 i_3 = i_1; /*0x1162*/
 }
 i_2 = 0; /*0x116e*/
 if ( i_3 ) /*0x1173*/
 {
 do /*0x128e*/
 {
 if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x11aa*/
 *(_QWORD *)(v9 + 8 *i_2),
 &unk_BB60,
 &v11) >= 0
 && *(_QWORD *)(v11 + 32) == a1 )
 {
 (*(void ( **)(__int64, void *))(qword_E2F8 + 144))(a1, &unk_BB60); /*0x11c1*/
 if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x11ea*/
 *(_QWORD *)(v9 + 8 *i_2),
 &unk_BB70,
 &v6) >= 0 )
 (*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB70, v6); /*0x1201*/
 if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x122a*/
 *(_QWORD *)(v9 + 8 *i_2),
 &unk_BB10,
 &v7) >= 0 )
 (*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB10, v7); /*0x1241*/
 if ( (*(__int64 ( **)(_QWORD, void *, __int64 *))(qword_E2F8 + 152))( /*0x126a*/
 *(_QWORD *)(v9 + 8 *i_2),
 &unk_BB30,
 &v8) >= 0 )
 (*(void ( **)(__int64, void *, __int64))(qword_E2F8 + 144))(a1, &unk_BB30, v8); /*0x1281*/
 }
 ++i_2; /*0x1287*/
 }
 while ( i_2 < i_1 ); /*0x128e*/
 }
 if ( v9 ) /*0x129b*/
 (*(void (**)(void))(qword_E2F8 + 72))(); /*0x12a4*/
 return 0; /*0x12a7*/
 }
 return result; /*0x12a9*/
}

// RtkUsbUndiInitSpinlock @ 0x12b4 __int64 RtkUsbUndiInitSpinlock(__int64 a1, __int64 a2, __int64 spinArg, double a4)
{
 __int64 result; // rax __int64 v6; // rdx unsigned __int8 v7; // bp char v8; // r15 char v9; // r14 char v10; // r12 unsigned __int8 Index; // si __int64 Result; // rdi char v13; // [rsp+50h] [rbp+8h] BYREF char v14; // [rsp+52h] [rbp+Ah]
 char v15; // [rsp+53h] [rbp+Bh]

 result = (*(__int64 ( **)(_QWORD, __int64, __int64))(*(_QWORD *)(a1 + 4872) + 48LL))( /*0x12e4*/
 *(_QWORD *)(a1 + 4872),
 a1 + 5106,
 spinArg);
 if ( result >= 0 ) /*0x12ea*/
 {
 result = (*(__int64 ( **)(_QWORD, __int64))(*(_QWORD *)(a1 + 4872) + 64LL))( /*0x1301*/
 *(_QWORD *)(a1 + 4872),
 a1 + 5124);
 if ( result >= 0 ) /*0x1307*/
 {
 v7 = *(_BYTE *)(a1 + 5128); /*0x130d*/
 v8 = 0; /*0x1314*/
 v9 = 0; /*0x1317*/
 v10 = 0; /*0x131a*/
 Index = 0; /*0x131d*/
 if ( !v7 ) /*0x132d*/
 goto LABEL_13; /*0x132d*/
 do /*0x13b2*/
 {
 LOBYTE(v6) = Index; /*0x133f*/
 Result = (*(__int64 ( **)(_QWORD, __int64, char *))(*(_QWORD *)(a1 + 4872) + 72LL))( /*0x1348*/
 *(_QWORD *)(a1 + 4872),
 v6,
 &v13);
 if ( Result >= 0 ) /*0x134e*/
 {
 if ( (v15 & 3) == 2 ) /*0x1358*/
 {
 if ( v14 >= 0 ) /*0x136a*/
 {
 RtkUsbUndiCopyMem((_BYTE *)(a1 + 4887), &v13, 7, a4); /*0x1384*/
 v9 = 1; /*0x1389*/
 }
 else
 {
 RtkUsbUndiCopyMem((_BYTE *)(a1 + 4880), &v13, 7, a4); /*0x1373*/
 v10 = 1; /*0x1378*/
 }
 }
 else if ( (v15 & 3) == 3 ) /*0x1390*/
 {
 RtkUsbUndiCopyMem((_BYTE *)(a1 + 5133), &v13, 7, a4); /*0x13a4*/
 v8 = 1; /*0x13a9*/
 }
 }
 ++Index; /*0x13ac*/
 }
 while ( Index < v7 ); /*0x13b2*/
 if ( !v9 ) /*0x13bb*/
LABEL_13:
 Result = 0x800000000000000EuLL; /*0x13bd*/
 if ( !v10 ) /*0x13c3*/
 Result = 0x800000000000000EuLL; /*0x13c3*/
 if ( !v8 ) /*0x13ca*/
 return 0x800000000000000EuLL; /*0x13ca*/
 return Result; /*0x13ce*/
 }
 }
 return result; /*0x13e0*/
}

// RtkUsbUndiUsbSetConfig @ 0x13f0 unsigned __int64 RtkUsbUndiUsbSetConfig(__int64 ( **a1)(), _DWORD *eng, _QWORD *a3)
{
 if ( eng ) /*0x13fa*/
 // "eng;en" /*0x141e*/
 return RtkUsbUndiAsciiStrToUint64Wrap( /*0x141e*/
 eng,
 a1[2],
 (__int64)&off_BD40,
 a3,
 a1 == (__int64 ( **)())&off_BD10);
 else return 0x8000000000000002uLL; /*0x1425*/
}

// RtkUsbUndiUsbClaimInterface @ 0x1434 unsigned __int64 RtkUsbUndiUsbClaimInterface(
 __int64 ( **a1)(),
 __int64 a2,
 __int64 a3,
 _DWORD *eng,
 _QWORD *a5)
{
 double v5; // xmm3_8 __int64 v11; // r14 __int64 v12; // rax __int64 v13; // rax _BYTE v14[40]; // [rsp+30h] [rbp-28h] BYREF __int64 v15; // [rsp+70h] [rbp+18h] BYREF if ( !a3 ) /*0x1455*/
 return 0x8000000000000003uLL; /*0x1455*/
 v11 = MEMORY[0xBBA8]; /*0x1466*/
 v12 = (*(__int64 ( **)(__int64, void *, _BYTE *, __int64, __int64, int))(qword_E2F8 + 280))( /*0x1493*/
 a2,
 &unk_BB50,
 v14,
 MEMORY[0xBBA8],
 a2,
 16);
 if ( v12 >= 0 ) /*0x149c*/
 {
 (*(void ( **)(__int64, void *, __int64, __int64))(qword_E2F8 + 288))(a2, &unk_BB50, v11, a2); /*0x14b5*/
 return 0x8000000000000003uLL; /*0x1461*/
 }
 if ( v12 != 0x8000000000000014uLL /*0x14ff*/
 || (*(__int64 ( **)(__int64, void *, __int64 *, __int64, __int64, int))(qword_E2F8 + 280))(
 a3,
 &unk_BB20,
 &v15,
 MEMORY[0xBBA8],
 a3,
 2) < 0 )
 {
 return 0x8000000000000003uLL; /*0x14ff*/
 }
 v13 = v15 - 360; /*0x150a*/
 if ( *(_QWORD *)(v15 - 360) != 1768189557 ) /*0x1517*/
 {
 RtkUsbUndiAssert( /*0x152c*/
 (__int64)MEMORY[0xD3E8], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\ComponentName.c"
 267,
 (__int64)MEMORY[0xD310], // "CR has Bad Signature"
 v5); // "CR has Bad Signature"
 v13 = v15; /*0x1531*/
 }
 if ( eng ) /*0x1540*/
 return RtkUsbUndiAsciiStrToUint64Wrap( /*0x1562*/
 eng,
 a1[2],
 *(_QWORD *)(v13 + 5880),
 a5,
 a1 == (__int64 ( **)())&off_BD10);
 else return 0x8000000000000002uLL; /*0x1569*/
}

// RtkUsbUndiSetupInterrupt @ 0x1588 __int64 RtkUsbUndiSetupInterrupt(__int64 i)
{
 __int16 v1; // ax __int64 Index; // rdx __int64 Index; // rcx _WORD *Realtek_USB_Ethernet_Controller_1; // rdi _WORD *Realtek_USB_Ethernet_Controller; // r9 v1 = word_BD60[0]; /*0x1592*/
 Index = 0; /*0x159f*/
 if ( word_BD60[0] == -1 ) /*0x15a8*/
 {
LABEL_7:
 *(_QWORD *)(i + 352) = 0; /*0x15ea*/
 *(_QWORD *)(i + 5880) = 0; /*0x15f2*/
 RtkUsbUndiAsciiStrDecimalToUint64( /*0x161b*/
 MEMORY[0xD3AC], // "eng"
 eng, // "eng"
 (char ***)(i + 5880),
 Realtek_USB_Ethernet_Controller, // "Realtek USB Ethernet Controller"
 1);
 Realtek_USB_Ethernet_Controller = Realtek_USB_Ethernet_Controller;// "Realtek USB Ethernet Controller" /*0x1620*/
 }
 else
 {
 Index = 0; /*0x15aa*/
 while ( 1 ) /*0x15b3*/
 {
 if ( *(_WORD *)(i + 504) == v1 && *(_WORD *)(i + 506) == word_BD60[Index + 1] ) /*0x15c9*/
 {
 Realtek_USB_Ethernet_Controller_1 = *(_WORD **)&word_BD60[Index + 4]; /*0x15cb*/
 if ( Realtek_USB_Ethernet_Controller_1 ) /*0x15d3*/
 break; /*0x15d3*/
 }
 ++Index; /*0x15d5*/
 Index = 8 *Index; /*0x15db*/
 v1 = word_BD60[8 *Index]; /*0x15df*/
 if ( v1 == -1 ) /*0x15e8*/
 goto LABEL_7; /*0x15e8*/
 }
 *(_QWORD *)(i + 5880) = 0; /*0x1651*/
 *(_QWORD *)(i + 352) = Realtek_USB_Ethernet_Controller_1; /*0x1659*/
 RtkUsbUndiAsciiStrDecimalToUint64( /*0x167d*/
 MEMORY[0xD3AC], // "eng"
 eng, // "eng"
 (char ***)(i + 5880),
 Realtek_USB_Ethernet_Controller_1,
 1);
 Realtek_USB_Ethernet_Controller = Realtek_USB_Ethernet_Controller_1; /*0x1682*/
 }
 // "en"
 return RtkUsbUndiAsciiStrDecimalToUint64( /*0x164b*/
 MEMORY[0xD3A8], // "en"
 eng_0, // "en"
 (char ***)(i + 5880),
 Realtek_USB_Ethernet_Controller,
 0);
}

// RtkSnpStart @ 0x1688 __int64 RtkSnpStart(__int64 a1, _WORD *a2)
{
 *(_WORD *)(a1 + 26) |= *a2 | 0xC000; /*0x1695*/
 *(_WORD *)(a1 + 24) = 0; /*0x169b*/
 return 0; /*0x169f*/
}

// RtkSnpStop @ 0x16a0 void RtkSnpStop(__int64 a1, __int64 a2)
{
 __int64 *v2; // r8 __int64 v3; // rax __int64 v4; // rax __int64 v5; // rax if ( *(_WORD *)a2 ) /*0x16a3*/
 {
 *(_DWORD *)(a1 + 24) = -2147483643; /*0x16a9*/
 }
 else if ( ((*(_WORD *)(a1 + 4) - 32) & 0xFFDF) != 0 ) /*0x16c3*/
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x16c5*/
 }
 else
 {
 v2 = *(__int64 **)(a1 + 8); /*0x16d4*/
 v3 = *v2; /*0x16d8*/
 if ( *(_BYTE *)(a2 + 4498) == 48 ) /*0x16db*/
 {
 *(_QWORD *)(a2 + 4896) = v3; /*0x16dd*/
 *(_QWORD *)(a2 + 4904) = v2[2]; /*0x16e8*/
 v4 = v2[1]; /*0x16ef*/
 *(_QWORD *)(a2 + 4920) = 0; /*0x16f3*/
 *(_QWORD *)(a2 + 4952) = 0; /*0x16fa*/
 *(_QWORD *)(a2 + 4864) = a2; /*0x1701*/
 *(_QWORD *)(a2 + 4912) = v4; /*0x1708*/
 }
 else
 {
 *(_QWORD *)(a2 + 4928) = v3; /*0x1711*/
 *(_QWORD *)(a2 + 4936) = 0; /*0x1718*/
 v5 = v2[1]; /*0x171f*/
 *(_QWORD *)(a2 + 4952) = 0; /*0x1723*/
 *(_QWORD *)(a2 + 4960) = 0; /*0x172a*/
 *(_QWORD *)(a2 + 4968) = 0; /*0x1731*/
 *(_QWORD *)(a2 + 4944) = v5; /*0x1738*/
 *(_QWORD *)(a2 + 4976) = 0; /*0x173f*/
 *(_QWORD *)(a2 + 4864) = v2[7]; /*0x174a*/
 }
 *(_WORD *)a2 = 1; /*0x1756*/
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x1759*/
 }
}

// RtkSnpInitialize @ 0x1764 void RtkSnpInitialize(__int64 a1, __int64 a2)
{
 if ( *(_WORD *)a2 == 2 ) /*0x1768*/
 {
 *(_DWORD *)(a1 + 24) = -2147483641; /*0x176a*/
 }
 else
 {
 *(_QWORD *)(a2 + 4896) = 0; /*0x1775*/
 *(_QWORD *)(a2 + 4904) = 0; /*0x177c*/
 *(_QWORD *)(a2 + 4912) = 0; /*0x1783*/
 *(_QWORD *)(a2 + 4928) = 0; /*0x178a*/
 *(_QWORD *)(a2 + 4936) = 0; /*0x1791*/
 *(_QWORD *)(a2 + 4944) = 0; /*0x1798*/
 *(_QWORD *)(a2 + 4960) = 0; /*0x179f*/
 *(_QWORD *)(a2 + 4968) = 0; /*0x17a6*/
 *(_QWORD *)(a2 + 4976) = 0; /*0x17ad*/
 *(_WORD *)a2 = 0; /*0x17b4*/
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x17b8*/
 }
}

// RtkSnpReset @ 0x17c0 __int64 RtkSnpReset(__int64 a1)
{
 __int64 result; // rax result = *(_QWORD *)(a1 + 16); /*0x17c0*/
 *(_DWORD *)result = 0; /*0x17c7*/
 *(_DWORD *)(result + 4) = 1500; /*0x17ca*/
 *(_DWORD *)(result + 8) = 10; /*0x17d1*/
 *(_QWORD *)(result + 12) = 100; /*0x17d8*/
 *(_QWORD *)(result + 20) = 0; /*0x17e0*/
 *(_DWORD *)(result + 28) = 917504; /*0x17e4*/
 *(_DWORD *)(result + 32) = 524294; /*0x17eb*/
 *(_DWORD *)(result + 36) = 100663792; /*0x17f2*/
 *(_DWORD *)(result + 40) = 100664320; /*0x17f9*/
 *(_WORD *)(result + 44) = 769; /*0x1800*/
 *(_BYTE *)(result + 46) = 0; /*0x1806*/
 *(_WORD *)(a1 + 26) |= 3u; /*0x180a*/
 return result; /*0x180f*/
}

// RtkSnpShutdown @ 0x1810 _DWORD *RtkSnpShutdown(__int64 a1)
{
 _DWORD *result; // rax result = *(_DWORD **)(a1 + 16); /*0x1810*/
 *result = 1380078421; /*0x1814*/
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x181a*/
 return result; /*0x1821*/
}

// RtkSnpReceiveFilters @ 0x1824 void RtkSnpReceiveFilters(__int64 a1, __int64 n0x8000, __int64 paddingArg2, double a4)
{
 bool v6; // bp __int64 v7; // rcx _DWORD *v8; // rbx bool v9; // [rsp+50h] [rbp+8h] BYREF unsigned int v10; // [rsp+60h] [rbp+18h] BYREF v6 = 0; /*0x1847*/
 v9 = 0; /*0x184a*/
 if ( *(_WORD *)(a1 + 2) < 2u ) /*0x1854*/
 {
 if ( *(_WORD *)n0x8000 == 2 ) /*0x1866*/
 {
 *(_DWORD *)(a1 + 24) = -2147483640; /*0x1868*/
 }
 else
 {
 v7 = *(_QWORD *)(a1 + 8); /*0x1874*/
 v8 = *(_DWORD **)(a1 + 16); /*0x1878*/
 *(_BYTE *)(n0x8000 + 4462) = *(_WORD *)(a1 + 2) != 1; /*0x188a*/
 *(_WORD *)(n0x8000 + 4458) = *(_WORD *)(v7 + 12); /*0x1894*/
 *(_BYTE *)(n0x8000 + 4460) = *(_BYTE *)(v7 + 24); /*0x189e*/
 *(_BYTE *)(n0x8000 + 4463) = *(_BYTE *)(v7 + 25); /*0x18aa*/
 *(_WORD *)(a1 + 24) = RtkUsbUndiPhyConfigureEx(n0x8000, n0x8000, paddingArg2, a4); /*0x18b5*/
 *v8 = 0; /*0x18b9*/
 v8[1] = 100663792; /*0x18bc*/
 v8[2] = 100664320; /*0x18c3*/
 if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x18ca*/
 {
 RtkUsbUndiCheckLinkStatus(n0x8000, &v9, &v10); /*0x18e0*/
 v6 = v9; /*0x18e5*/
 }
 if ( !*(_BYTE *)(n0x8000 + 4462) || v6 ) /*0x18f6*/
 {
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x1905*/
 *(_WORD *)n0x8000 = 2; /*0x190c*/
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483642; /*0x18f8*/
 *(_WORD *)n0x8000 = 1; /*0x18ff*/
 }
 }
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1856*/
 }
}

// RtkSnpStationAddress @ 0x1928 __int64 RtkSnpStationAddress(__int64 a1, __int64 n0x8000, __int64 paddingArg2, double a4)
{
 __int16 v6; // bx __int64 result; // rax if ( *(_WORD *)(a1 + 2) < 3u ) /*0x1942*/
 {
 v6 = *(_WORD *)(a1 + 2); /*0x194d*/
 RtkUsbUndiWaitForNvram(n0x8000, n0x8000, paddingArg2, a4); /*0x1954*/
 RtkUsbUndiConfigurePhy(n0x8000); /*0x195c*/
 if ( (v6 & 2) == 0 ) /*0x1964*/
 {
 RtkUsbUndiPhyRegsConfig2(n0x8000, *(_WORD *)(n0x8000 + 4496), 0, 0); /*0x1976*/
 *(_WORD *)(n0x8000 + 4496) &= ~4u; /*0x1980*/
 }
 result = RtkUsbUndiPhyFullInit(n0x8000); /*0x198a*/
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x198f*/
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1944*/
 }
 return result; /*0x19a0*/
}

// RtkSnpStatistics @ 0x19a8 __int64 RtkSnpStatistics(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
 __int64 n0x8000_1; // rbx __int64 v6; // rax __int64 paddingArg1; // rdx __int64 paddingArg2; // r8 __int64 n0x8000_2; // [rsp+30h] [rbp-18h]
 char v11; // [rsp+50h] [rbp+8h] BYREF n0x8000_1 = n0x8000; /*0x19c0*/
 if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x19c6*/
 {
 v6 = *(_QWORD *)(n0x8000 + 4872); /*0x19cf*/
 n0x8000_2 = n0x8000; /*0x19d6*/
 LOBYTE(n0x8000) = *(_BYTE *)(n0x8000 + 5135); /*0x19da*/
 (*(void ( **)(__int64, __int64, _QWORD, __int64, __int64, unsigned __int64 ( *)(__int64, __int64, __int64), __int64))(v6 + 16))( /*0x19ff*/
 v6,
 n0x8000,
 0,
 200,
 10,
 RtkUsbUndiInterruptHandler,
 n0x8000_2);
 }
 if ( (unsigned int)(*(_DWORD *)(n0x8000_1 + 5000) - 7) <= 2 ) /*0x1a0e*/
 RtkUsbUndiPhyPatchLoad(n0x8000_1); /*0x1a13*/
 RtkUsbUndiMcastDisableAll(n0x8000_1); /*0x1a1b*/
 if ( *(_DWORD *)(n0x8000_1 + 5000) == 1 ) /*0x1a2d*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1a5a*/
 RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1a86*/
 RtkUsbUndiControlTransferUsb2(n0x8000_1, 4u, 9081, 0, 0, &v11, 2); /*0x1ab2*/
 }
 RtkUsbUndiWaitForNvram(n0x8000_1, paddingArg1, paddingArg2, a4); /*0x1aba*/
 RtkUsbUndiConfigurePhy(n0x8000_1); /*0x1ac2*/
 *(_WORD *)(a1 + 24) = 0; /*0x1ac7*/
 *(_WORD *)n0x8000_1 = 1; /*0x1ad1*/
 *(_WORD *)(a1 + 26) = -16384; /*0x1adf*/
 return 49152; /*0x1ae8*/
}

// RtkSnpMCastIpToMac @ 0x1af0 __int64 RtkSnpMCastIpToMac(__int64 a1, __int64 a2)
{
 __int64 n0x4000; // rax n0x4000 = *(_WORD *)(a1 + 2) & 0xC000; /*0x1afc*/
 if ( (*(_WORD *)(a1 + 2) & 0xC000) == 0 /*0x1b18*/
 || ((_DWORD)n0x4000 == 0x4000 || (_DWORD)n0x4000 == 0x8000) && (*(_BYTE *)(a1 + 2) & 0xF) != 0 )
 {
 n0x4000 = 1; /*0x1b22*/
 if ( (*(_BYTE *)(a2 + 4504) & 1) != 0 ) /*0x1b2d*/
 *(_WORD *)(a1 + 26) |= 1u; /*0x1b2f*/
 if ( (*(_BYTE *)(a2 + 4504) & 2) != 0 ) /*0x1b3a*/
 *(_WORD *)(a1 + 26) |= 2u; /*0x1b3c*/
 if ( (*(_BYTE *)(a2 + 4504) & 4) != 0 ) /*0x1b48*/
 *(_WORD *)(a1 + 26) |= 4u; /*0x1b4a*/
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1b1a*/
 }
 return n0x4000; /*0x1b21*/
}

// RtkSnpNvData @ 0x1b50 __int16 RtkSnpNvData(__int64 a1, __int64 n0x8000)
{
 __int16 v4; // cx int n0x8000_1; // eax __int16 Table; // dx __int16 Ptr; // ax _BYTE *v8; // rcx unsigned __int16 v9; // ax __int64 Index; // rdx __int64 v11; // r8 v4 = *(_WORD *)(a1 + 2); /*0x1b6f*/
 n0x8000_1 = v4 & 0xC000; /*0x1b8d*/
 if ( (v4 & 0xC000) != 0 ) /*0x1b90*/
 {
 if ( n0x8000_1 == 0x4000 ) /*0x1ba1*/
 {
 if ( !*(_WORD *)(a1 + 4) ) /*0x1c1f*/
 {
 Table = *(_WORD *)(n0x8000 + 4496) & ~(v4 & 0x1F); /*0x1c33*/
 goto LABEL_17; /*0x1c33*/
 }
 }
 else if ( n0x8000_1 == 0x8000 /*0x1c01*/
 && (v4 & 0x1F) != 0
 && (!*(_WORD *)(a1 + 4) || (v4 & 4) != 0 && (v4 & 0x10) == 0 && (*(_BYTE *)(a1 + 4) & 0x1F) == 0)
 && ((v4 & 4) == 0
 || (v4 & 0x2000) == 0 && (v4 & 0x10) == 0 && (*(_WORD *)(a1 + 4) || *(_WORD *)(n0x8000 + 4604))) )
 {
 Table = *(_WORD *)(n0x8000 + 4496) | 1 | v4 & 0x1F; /*0x1c18*/
LABEL_17:
 if ( (v4 & 0x2000) != 0 ) /*0x1c3e*/
 {
 *(_WORD *)(n0x8000 + 4604) = 0; /*0x1c45*/
 Table &= ~4u; /*0x1c4c*/
 }
 if ( !*(_BYTE *)(n0x8000 + 5449) ) /*0x1c4f*/
 RtkUsbUndiPhyRegsConfig2(n0x8000, Table, *(_QWORD *)(a1 + 8), *(unsigned __int16 *)(a1 + 4)); /*0x1c63*/
 goto LABEL_23; /*0x1c68*/
 }
LABEL_31:
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1ccb*/
 return n0x8000_1; /*0x1ccb*/
 }
 if ( (v4 & 0x1F) != 0 || *(_WORD *)(a1 + 4) ) /*0x1c71*/
 goto LABEL_31; /*0x1c75*/
LABEL_23:
 if ( *(_WORD *)(a1 + 6) ) /*0x1c77*/
 {
 Ptr = *(_WORD *)(n0x8000 + 4604); /*0x1c7d*/
 if ( Ptr ) /*0x1c87*/
 {
 v8 = *(_BYTE **)(a1 + 16); /*0x1c89*/
 v9 = 32 *Ptr; /*0x1c8d*/
 if ( v9 > *(_WORD *)(a1 + 6) ) /*0x1c9c*/
 v9 = *(_WORD *)(a1 + 6); /*0x1c9c*/
 if ( v9 ) /*0x1ca4*/
 {
 Index = n0x8000 + 4606 - (_QWORD)v8; /*0x1ca6*/
 v11 = v9; /*0x1ca9*/
 do /*0x1cb8*/
 {
 *v8 = v8[Index]; /*0x1cb0*/
 ++v8; /*0x1cb2*/
 --v11; /*0x1cb5*/
 }
 while ( v11 ); /*0x1cb8*/
 }
 }
 }
 LOWORD(n0x8000_1) = *(_WORD *)(n0x8000 + 4496) | 0xC000; /*0x1cc1*/
 *(_WORD *)(a1 + 26) |= n0x8000_1; /*0x1cc5*/
 return n0x8000_1; /*0x1ce6*/
}

// RtkSnpGetStatus @ 0x1cf0 void RtkSnpGetStatus(__int64 a1, _BYTE *n0x8000, __int64 a3, double a4)
{
 _BYTE *v6; // rbp _BYTE *v7; // rsi _BYTE *v8; // rdx __int64 v9; // rsi if ( *(_WORD *)(a1 + 2) == 1 ) /*0x1d19*/
 {
 v6 = n0x8000 + 252; /*0x1d1b*/
 v7 = n0x8000 + 220; /*0x1d22*/
 if ( RtkUsbUndiSetMem(n0x8000 + 252, n0x8000 + 220, 32, a4) ) /*0x1d32*/
 {
 RtkUsbUndiCopyMem(v6, v7, 32, a4); /*0x1d45*/
 RtkUsbUndiPhyGetStatus((__int64)n0x8000); /*0x1d4d*/
 }
 }
 v8 = *(_BYTE **)(a1 + 8); /*0x1d52*/
 if ( v8 ) /*0x1d59*/
 {
 RtkUsbUndiCopyMem(n0x8000 + 252, v8, 32, a4); /*0x1d65*/
 RtkUsbUndiPhyGetStatus((__int64)n0x8000); /*0x1d6d*/
 }
 v9 = *(_QWORD *)(a1 + 16); /*0x1d72*/
 if ( v9 ) /*0x1d79*/
 {
 RtkUsbUndiCopyMem(*(_BYTE **)(a1 + 16), n0x8000 + 252, 32, a4); /*0x1d88*/
 RtkUsbUndiCopyMem((_BYTE *)(v9 + 32), n0x8000 + 284, 32, a4); /*0x1d9b*/
 RtkUsbUndiCopyMem((_BYTE *)(v9 + 64), n0x8000 + 220, 32, a4); /*0x1dae*/
 }
 *(_DWORD *)(a1 + 24) = -1073741824; /*0x1dbd*/
}

// RtkSnpTransmit @ 0x1dd4 void RtkSnpTransmit(__int64 a1, _QWORD *a2, __int64 a3, double a4)
{
 int v5; // ecx __int64 i[66]; // [rsp+20h] [rbp-218h] BYREF v5 = *(unsigned __int16 *)(a1 + 2); /*0x1de9*/
 if ( (v5 & 0xFFFFFFFE) != 0 ) /*0x1df6*/
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1df8*/
 }
 else
 {
 *(_WORD *)(a1 + 24) = 0; /*0x1e03*/
 if ( (v5 & 1) != 0 ) /*0x1e0c*/
 {
 RtkUsbUndiZeroMem((__int64)i, 0x208u, a3, a4); /*0x1e18*/
 a2[669] = 0; /*0x1e1d*/
 a2[667] = 0; /*0x1e24*/
 a2[665] = 0; /*0x1e2b*/
 a2[663] = 0; /*0x1e32*/
 a2[661] = 0; /*0x1e39*/
 a2[659] = 0; /*0x1e40*/
 *(_WORD *)(a1 + 24) = 0; /*0x1e47*/
 }
 else
 {
 *(_WORD *)(a1 + 24) = RtkUsbUndiGetInfo(a2, *(_BYTE **)(a1 + 16), *(unsigned __int16 *)(a1 + 6), a4); /*0x1e5e*/
 }
 }
}

// RtkSnpReceive @ 0x1e78 char RtkSnpReceive(__int64 a1)
{
 _BYTE *v1; // rdx __int64 Result; // r8 char result; // al v1 = *(_BYTE **)(a1 + 8); /*0x1e7c*/
 Result = *(_QWORD *)(a1 + 16); /*0x1e80*/
 if ( (*(_BYTE *)(a1 + 2) & 1) != 0 ) /*0x1e84*/
 {
 if ( *v1 == 0xFF ) /*0x1e89*/
 {
 *(_WORD *)Result = 13107; /*0x1e93*/
 *(_BYTE *)(Result + 2) = v1[12]; /*0x1e9c*/
 *(_BYTE *)(Result + 3) = v1[13]; /*0x1ea3*/
 *(_BYTE *)(Result + 4) = v1[14]; /*0x1eaa*/
 result = v1[15]; /*0x1eae*/
 *(_BYTE *)(Result + 5) = result; /*0x1eb1*/
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483636; /*0x1e8b*/
 }
 }
 return result; /*0x1e92*/
}

// RtkSnpMediaPresent @ 0x1eb8 __int64 RtkSnpMediaPresent(__int64 a1)
{
 *(_WORD *)(a1 + 26) = 12; /*0x1ebd*/
 return 12; /*0x1ec1*/
}

// RtkSnpUndiCommandDispatch @ 0x1ec4 unsigned __int16 RtkSnpUndiCommandDispatch(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
 __int64 v4; // rsi unsigned __int16 Result; // ax __int64 n8; // r8 __int16 v9; // dx unsigned __int16 n8_1; // dx _QWORD *v11; // rsi unsigned __int16 Ptr; // ax __int16 n511; // ax __int16 v14; // ax _BYTE v15[272]; // [rsp+20h] [rbp-128h] BYREF v4 = *(_QWORD *)(a1 + 16); /*0x1ee3*/
 Result = *(_WORD *)(a1 + 6) - 1; /*0x1eed*/
 if ( Result > 6u ) /*0x1f01*/
 {
 n8 = 8; /*0x1f0f*/
 }
 else
 {
 n8 = *(unsigned __int16 *)(a1 + 6); /*0x1f03*/
 if ( !*(_WORD *)(a1 + 6) ) /*0x1f0b*/
 goto LABEL_6; /*0x1f0b*/
 }
 Result = (unsigned __int16)RtkUsbUndiCopyMem(*(_BYTE **)(a1 + 16), v15, n8, a4); /*0x1f1a*/
LABEL_6:
 if ( (*(_BYTE *)(a1 + 2) & 2) != 0 )
 {
 v9 = *(_WORD *)(a1 + 6); /*0x1f29*/
 if ( !v9 ) /*0x1f30*/
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x1f32*/
 return Result; /*0x1f39*/
 }
 *(_WORD *)(a1 + 6) = 8; /*0x1f3e*/
 n8_1 = v9 - 8; /*0x1f4a*/
 if ( *(_WORD *)(n0x8000 + 4440) == *(_WORD *)(n0x8000 + 4442) )
 {
 *(_WORD *)(a1 + 26) |= 0x10u; /*0x1f57*/
 }
 else if ( n8_1 >= 8u )
 {
 v11 = (_QWORD *)(v4 + 8); /*0x1f64*/
 do
 {
 Ptr = *(_WORD *)(n0x8000 + 4440); /*0x1f67*/
 if ( Ptr == *(_WORD *)(n0x8000 + 4442) ) /*0x1f75*/
 break; /*0x1f75*/
 *v11 = *(_QWORD *)(n0x8000 + 8LL *Ptr + 344); /*0x1f82*/
 n511 = *(_WORD *)(n0x8000 + 4440); /*0x1f85*/
 v14 = n511 == 511 ? 0 : n511 + 1;
 *(_WORD *)(n0x8000 + 4440) = v14; /*0x1fa0*/
 *(_WORD *)(a1 + 6) += 8; /*0x1fa7*/
 --*(_WORD *)(n0x8000 + 4444); /*0x1fb1*/
 ++v11; /*0x1fbd*/
 n8_1 -= 8; /*0x1fc0*/
 }
 while ( n8_1 >= 8u );
 }
 if ( *(_WORD *)(n0x8000 + 4440) != *(_WORD *)(n0x8000 + 4442) ) /*0x1fd7*/
 *(_WORD *)(a1 + 26) |= 0x2000u; /*0x1fde*/
 }
 if ( (*(_BYTE *)(a1 + 2) & 4) != 0 ) /*0x1fe6*/
 {
 if ( *(_BYTE *)(n0x8000 + 4591) ) /*0x1fe8*/
 {
 *(_BYTE *)(n0x8000 + 4992) = 1; /*0x2012*/
 }
 else if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x1ff1*/
 {
 RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x200b*/
 }
 if ( *(_BYTE *)(n0x8000 + 4992) ) /*0x2019*/
 {
 *(_DWORD *)(n0x8000 + 208) |= 4u; /*0x2022*/
 }
 else
 {
 *(_WORD *)(a1 + 26) |= 0x40u; /*0x202b*/
 *(_DWORD *)(n0x8000 + 208) &= ~4u; /*0x2030*/
 }
 }
 if ( !*(_BYTE *)(n0x8000 + 4591) ) /*0x2037*/
 RtkUsbUndiCheckLedMode(n0x8000); /*0x2043*/
 *(_WORD *)(a1 + 24) = 0; /*0x204d*/
 *(_WORD *)(a1 + 26) |= 0xC000u; /*0x2051*/
 return -16384; /*0x2069*/
}

// RtkSnpUndiDataDispatch @ 0x2074 char RtkSnpUndiDataDispatch(__int64 a1)
{
 __int64 v1; // r8 __int64 Index; // rcx __int64 n6; // r9 __int64 Result; // r8 char result; // al __int64 Index; // rcx __int64 n6_1; // r9 __int64 Result; // r8 if ( !*(_WORD *)(a1 + 4) ) /*0x2074*/
 goto LABEL_2; /*0x2079*/
 v1 = *(_QWORD *)(a1 + 8); /*0x2083*/
 if ( (*(_BYTE *)(a1 + 2) & 1) != 0 ) /*0x208f*/
 {
 if ( !*(_WORD *)(v1 + 72) || *(_DWORD *)(v1 + 84) < 0xEu ) /*0x209e*/
 {
LABEL_2:
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x207b*/
 return result; /*0x2082*/
 }
 Index = *(_QWORD *)(v1 + 76); /*0x20a0*/
 n6 = 6; /*0x20a9*/
 *(_WORD *)(Index + 12) = *(_WORD *)(v1 + 68); /*0x20ad*/
 Result = v1 - Index; /*0x20b1*/
 do /*0x20c8*/
 {
 *(_BYTE *)Index = *(_BYTE *)(Result + Index + 32); /*0x20b9*/
 result = *(_BYTE *)(Result + Index); /*0x20bb*/
 *(_BYTE *)(Index + 6) = result; /*0x20bf*/
 ++Index; /*0x20c2*/
 --n6; /*0x20c5*/
 }
 while ( n6 ); /*0x20c8*/
 }
 else
 {
 Index = *(_QWORD *)(v1 + 64); /*0x20cb*/
 n6_1 = 6; /*0x20d4*/
 *(_WORD *)(Index + 12) = *(_WORD *)(v1 + 76); /*0x20da*/
 Result = v1 - Index; /*0x20de*/
 do /*0x20f5*/
 {
 *(_BYTE *)Index = *(_BYTE *)(Result + Index + 32); /*0x20e6*/
 result = *(_BYTE *)(Result + Index); /*0x20e8*/
 *(_BYTE *)(Index + 6) = result; /*0x20ec*/
 ++Index; /*0x20ef*/
 --n6_1; /*0x20f2*/
 }
 while ( n6_1 ); /*0x20f5*/
 }
 return result; /*0x2082*/
}

// RtkSnpGetHwAddressSize @ 0x20f8 __int64 RtkSnpGetHwAddressSize(__int64 a1, __int64 n0x8000, char *descDst, double a4)
{
 __int64 n0x8000_1; // rax __int16 Table; // ax bool v7; // zf n0x8000_1 = n0x8000; /*0x2103*/
 if ( *(_WORD *)(a1 + 4) ) /*0x20fe*/
 {
 Table = RtkUsbUndiPhyRegsConfig1(n0x8000, *(__int64 ***)(a1 + 8), descDst, a4); /*0x211b*/
 *(_WORD *)(a1 + 24) = Table; /*0x2120*/
 v7 = Table == 0; /*0x2124*/
 n0x8000_1 = 0x8000; /*0x2127*/
 if ( v7 ) /*0x212c*/
 n0x8000_1 = 49152; /*0x212e*/
 *(_WORD *)(a1 + 26) = n0x8000_1; /*0x2133*/
 }
 else
 {
 *(_DWORD *)(a1 + 24) = -2147483647; /*0x210b*/
 }
 return n0x8000_1; /*0x2137*/
}

// RtkSnpMacToBytes @ 0x2140 __int64 RtkSnpMacToBytes(__int64 a1, __int64 n0x8000, __int64 a3, double a4)
{
 __int16 Table; // ax bool v6; // zf __int64 n0x8000_1; // rax Table = RtkUsbUndiPhyConfigGiga(n0x8000, *(char ***)(a1 + 8), *(_QWORD **)(a1 + 16), a4); /*0x2157*/
 *(_WORD *)(a1 + 24) = Table; /*0x215c*/
 v6 = Table == 0; /*0x2160*/
 n0x8000_1 = 0x8000; /*0x2163*/
 if ( v6 ) /*0x2168*/
 n0x8000_1 = 49152; /*0x216a*/
 *(_WORD *)(a1 + 26) = n0x8000_1; /*0x216f*/
 return n0x8000_1; /*0x2173*/
}

// RtkUsbUndiInterruptCallback @ 0x217c void RtkUsbUndiInterruptCallback(unsigned __int16 *a1)
{
 __int64 Index; // rax _WORD *v2; // rdx unsigned __int16 v3; // r8 char *v4; // rax __int16 v5; // r8 if ( a1 ) /*0x2182*/
 {
 Index = a1[14]; /*0x2184*/
 v2 = (_WORD *)(qword_E920[Index] + 424LL); /*0x2193*/
 *(_BYTE *)(qword_E920[Index] + 4922LL) = 49; /*0x219a*/
 if ( *a1 > 0x11u || a1[12] || a1[13] ) /*0x21ae*/
 goto LABEL_7; /*0x21b3*/
 if ( a1[2] ) /*0x21b5*/
 {
 if ( !*((_QWORD *)a1 + 1) ) /*0x21ce*/
 goto LABEL_7; /*0x21ce*/
 }
 else if ( *((_QWORD *)a1 + 1) ) /*0x21bc*/
 {
LABEL_7:
 *((_DWORD *)a1 + 6) = -2147483647; /*0x21c2*/
 return; /*0x21c2*/
 }
 v3 = a1[3]; /*0x21d0*/
 if ( v3 ) /*0x21d9*/
 {
 if ( !*((_QWORD *)a1 + 2) ) /*0x21e7*/
 goto LABEL_7; /*0x21e7*/
 }
 else if ( *((_QWORD *)a1 + 2) ) /*0x21db*/
 {
 goto LABEL_7; /*0x21df*/
 }
 v4 = (char *)&unk_BD80 + 16 * *a1; /*0x21fd*/
 if ( *(_WORD *)v4 != 0xFFFF && *(_WORD *)v4 != a1[2] ) /*0x220f*/
 goto LABEL_7; /*0x220f*/
 if ( *((_WORD *)v4 + 1) != 0xFFFF && *((_WORD *)v4 + 1) != v3 ) /*0x221d*/
 goto LABEL_7; /*0x221d*/
 v5 = *((_WORD *)v4 + 2); /*0x221f*/
 if ( v5 != -1 && v5 != a1[1] ) /*0x222f*/
 goto LABEL_7; /*0x222f*/
 if ( *((_WORD *)v4 + 3) == 0xFFFF ) /*0x2236*/
 goto LABEL_25; /*0x2236*/
 if ( !*v2 ) /*0x2238*/
 {
 *((_DWORD *)a1 + 6) = -2147483642; /*0x223e*/
 return; /*0x2245*/
 }
 if ( *((_WORD *)v4 + 3) != 2 || *v2 == 2 ) /*0x2252*/
 {
LABEL_25:
 *((_DWORD *)a1 + 6) = -1073741824; /*0x2260*/
 (*((void (**)(void))v4 + 1))(); /*0x2267*/
 }
 else
 {
 *((_DWORD *)a1 + 6) = -2147483639; /*0x2254*/
 }
 }
}

// RtkUsbUndiInitSpinlock2 @ 0x226c _BYTE *RtkUsbUndiInitSpinlock2(__int64 a1)
{
 _BYTE *i_1; // rax char v2; // cl __int16 v3; // cx char v4; // dl _BYTE *i_2; // r8 __int16 v6; // cx _BYTE *i; // r8 i_1 = (_BYTE *)MEMORY[0xE2E8]; /*0x226c*/
 if ( a1 ) /*0x2279*/
 {
 v6 = *(unsigned __int8 *)(MEMORY[0xE2E8] + 4); /*0x22aa*/
 ++*(_BYTE *)(MEMORY[0xE2E8] + 7); /*0x22ae*/
 v4 = 0; /*0x22b1*/
 for ( i = i_1; v6; --v6 ) /*0x22ba*/
 v4 += *i++; /*0x22c2*/
 }
 else
 {
 v2 = *(_BYTE *)(MEMORY[0xE2E8] + 7); /*0x227b*/
 if ( v2 ) /*0x2280*/
 *(_BYTE *)(MEMORY[0xE2E8] + 7) = v2 - 1; /*0x2284*/
 v3 = (unsigned __int8)i_1[4]; /*0x2287*/
 v4 = 0; /*0x228b*/
 i_2 = i_1; /*0x228e*/
 if ( i_1[4] ) /*0x2287*/
 {
 do /*0x22a6*/
 {
 v4 += *i_2++; /*0x229c*/
 --v3; /*0x22a2*/
 }
 while ( v3 ); /*0x22a6*/
 }
 }
 i_1[5] -= v4; /*0x22ce*/
 return i_1; /*0x22d1*/
}

// RtkUsbUndiCheckLinkStatus @ 0x22d4 __int64 RtkUsbUndiCheckLinkStatus(__int64 a1, bool *a2, unsigned int *a3)
{
 int v3; // eax __int16 v7; // r9 __int64 Result; // r8 __int64 v9; // rax int v10; // eax bool v11; // cf unsigned int v12; // eax __int16 v14; // [rsp+50h] [rbp+8h] BYREF v3 = *(_DWORD *)(a1 + 5000); /*0x22e9*/
 v7 = 0; /*0x22fb*/
 v14 = 0; /*0x22ff*/
 Result = 0; /*0x2304*/
 if ( v3 == 1 ) /*0x230a*/
 {
 v9 = RtkUsbUndiPhyRead(a1, 0x11u, &v14, 0); /*0x2340*/
 }
 else
 {
 if ( (unsigned int)(v3 - 2) > 9 ) /*0x2312*/
 goto LABEL_6; /*0x2312*/
 v9 = RtkUsbUndiControlTransferUsb2(a1, 2u, 59656, 0, 1u, &v14, 2); /*0x2332*/
 }
 v7 = v14; /*0x2345*/
 Result = v9; /*0x234b*/
LABEL_6:
 v10 = *(_DWORD *)(a1 + 5000); /*0x234e*/
 if ( v10 == 1 ) /*0x2357*/
 {
 *a2 = (v7 & 0x400) != 0; /*0x23b2*/
 if ( (v7 & 0x400) != 0 ) /*0x23b4*/
 {
 if ( (v7 & 0x2000) == 0 ) /*0x23c0*/
 {
 v12 = (v7 & 0x4000 | 0x2000u) >> 13; /*0x23f1*/
 goto LABEL_21; /*0x23f1*/
 }
 if ( v7 < 0 ) /*0x23cb*/
 *a3 = 6; /*0x23cd*/
 v11 = (v7 & 0x4000) != 0; /*0x23dc*/
 goto LABEL_13; /*0x23e0*/
 }
LABEL_22:
 *a3 = 0; /*0x23f8*/
 return Result; /*0x23f8*/
 }
 if ( (unsigned int)(v10 - 2) <= 9 )
 {
 *a2 = (v7 & 2) != 0; /*0x236c*/
 if ( (v7 & 2) != 0 )
 {
 if ( (v7 & 1) == 0 ) /*0x2378*/
 {
 v12 = (v7 & 8 | 4u) >> 2; /*0x23a3*/
 goto LABEL_21; /*0x23a6*/
 }
 if ( (v7 & 0x10) != 0 ) /*0x237e*/
 {
 *a3 = 6; /*0x2380*/
 return Result; /*0x2386*/
 }
 v11 = (v7 & 8) != 0; /*0x238c*/
LABEL_13:
 v12 = v11 ? 4 : 2;
LABEL_21:
 *a3 = v12; /*0x23f4*/
 return Result; /*0x23f6*/
 }
 goto LABEL_22; /*0x236e*/
 }
 return Result; /*0x240d*/
}

// RtkUsbUndiWaitForNvram @ 0x2414 __int64 RtkUsbUndiWaitForNvram(__int64 n0x8000, __int64 paddingArg1, __int64 paddingArg2, double a4)
{
 int Ptr; // eax __int64 v6; // r8 __int64 result; // rax __int64 v8; // r8 __int64 v9; // r8 Ptr = *(unsigned __int16 *)(n0x8000 + 4468); /*0x241e*/
 *(_WORD *)(n0x8000 + 332) = 0; /*0x242a*/
 *(_DWORD *)(n0x8000 + 4500) = 0; /*0x2431*/
 RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 104), 496 *Ptr, paddingArg2, a4); /*0x2444*/
 result = RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 112), *(unsigned __int16 *)(n0x8000 + 4472) << 10, v6, a4); /*0x245a*/
 if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x245f*/
 {
 RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 144), 0x800u, v8, a4); /*0x2476*/
 return RtkUsbUndiZeroMem(*(_QWORD *)(n0x8000 + 152), 0x800u, v9, a4); /*0x2484*/
 }
 return result; /*0x248e*/
}

// RtkUsbUndiInitPhy @ 0x2494 __int64 RtkUsbUndiInitPhy(__int64 a1)
{
 int v2; // ecx __int16 n512; // ax __int16 v4; // ax

 *(_WORD *)(a1 + 4466) = 496; /*0x24b2*/
 *(_WORD *)(a1 + 4470) = 1024; /*0x24be*/
 v2 = *(_DWORD *)(a1 + 5000); /*0x24c5*/
 if ( v2 == 1 ) /*0x24ce*/
 {
 *(_WORD *)(a1 + 4474) = 2568; /*0x24ef*/
 if ( !*(_BYTE *)(a1 + 5426) ) /*0x24ff*/
 goto LABEL_8; /*0x24ff*/
 n512 = 512; /*0x2501*/
 goto LABEL_7; /*0x2501*/
 }
 if ( (unsigned int)(v2 - 2) <= 9 ) /*0x24d6*/
 {
 n512 = 8; /*0x24d8*/
 *(_WORD *)(a1 + 4474) = 6152; /*0x24db*/
 if ( *(_BYTE *)(a1 + 5426) ) /*0x24e4*/
LABEL_7:
 *(_WORD *)(a1 + 5390) = n512; /*0x2506*/
 }
LABEL_8:
 if ( (unsigned int)(v2 - 1) <= 0xA ) /*0x2518*/
 {
 *(_WORD *)(a1 + 4468) = *(unsigned __int8 *)(a1 + 4474) + 2000; /*0x2524*/
 if ( *(_BYTE *)(a1 + 5426) ) /*0x252b*/
 v4 = -30720; /*0x2534*/
 else v4 = *(unsigned __int8 *)(a1 + 4475) + 2004; /*0x2547*/
 *(_WORD *)(a1 + 4472) = v4; /*0x254a*/
 }
 (*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))( /*0x2573*/
 4,
 496 * *(unsigned __int16 *)(a1 + 4468),
 a1 + 104);
 (*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))(4, *(unsigned __int16 *)(a1 + 4468), a1 + 120); /*0x258a*/
 (*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2000, a1 + 136); /*0x25a0*/
 (*(void ( **)(__int64, _QWORD, __int64))(qword_E2F8 + 64))( /*0x25bd*/
 4,
 *(unsigned __int16 *)(a1 + 4472) << 10,
 a1 + 112);
 if ( *(_BYTE *)(a1 + 5426) ) /*0x25c0*/
 {
 (*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2048, a1 + 144); /*0x25e0*/
 (*(void ( **)(__int64, __int64, __int64))(qword_E2F8 + 64))(4, 2048, a1 + 152); /*0x25f5*/
 }
 *(_WORD *)(a1 + 332) = 0; /*0x25fd*/
 *(_DWORD *)(a1 + 4500) = 0; /*0x2604*/
 return 0; /*0x2616*/
}

// RtkUsbUndiConfigurePhy @ 0x261c __int64 RtkUsbUndiConfigurePhy(__int64 a1)
{
 int v1; // eax unsigned int n0xA; // edi __int64 Index; // r15 __int64 Result; // rsi __int64 result; // rax int Result; // [rsp+70h] [rbp+30h] BYREF int n4; // [rsp+78h] [rbp+38h] BYREF v1 = *(_DWORD *)(a1 + 5000); /*0x262f*/
 n0xA = 0; /*0x2635*/
 Index = 0; /*0x263a*/
 Result = 0; /*0x263d*/
 Result = 0; /*0x2640*/
 if ( v1 == 1 ) /*0x2645*/
 {
 n4 = 4; /*0x2788*/
 RtkUsbUndiControlTransferUsb3(a1, 4u, 9081, 0, 0, &n4, 2); /*0x2791*/
 while ( 1 ) /*0x27a2*/
 {
 if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x27a2*/
 (*(void ( **)(__int64))(a1 + 4896))(20000); /*0x27a7*/
 else
 (*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 20000); /*0x27b9*/
 result = RtkUsbUndiControlTransferUsb2(a1, 4u, 9081, 0, 0, &Result, 2); /*0x27e4*/
 if ( result < 0 ) /*0x27ec*/
 break; /*0x27ec*/
 if ( Result < 0 ) /*0x27f5*/
 return 0; /*0x280c*/
 if ( (unsigned __int64)++Index > 0x64 ) /*0x27fe*/
 return 0x8000000000000007uLL; /*0x280a*/
 }
 }
 else
 {
 if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2651*/
 {
 Result = RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x2685*/
 if ( Result >= 0 ) /*0x268b*/
 {
 n4 = Result & 0xFFFFFF | 0x10000000; /*0x26b2*/
 Result = RtkUsbUndiControlTransferUsb3(a1, 4u, 59408, 15, 1u, &n4, 2); /*0x26c8*/
 if ( Result >= 0 ) /*0x26ce*/
 {
 RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x26f6*/
 do /*0x2751*/
 {
 if ( (Result & 0x10000000) == 0 ) /*0x275e*/
 break; /*0x275e*/
 if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x2704*/
 (*(void ( **)(__int64))(a1 + 4896))(100); /*0x270b*/
 else
 (*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 100); /*0x271f*/
 RtkUsbUndiControlTransferUsb2(a1, 4u, 59408, 0, 1u, &Result, 2); /*0x2747*/
 ++n0xA; /*0x274c*/
 }
 while ( n0xA <= 0xA ); /*0x2751*/
 }
 }
 }
 return Result; /*0x280f*/
 }
 return result; /*0x281a*/
}

// RtkUsbUndiPhyReset @ 0x2828 signed __int64 RtkUsbUndiPhyReset(__int64 n0x8000, __int64 a2, __int64 a3, double a4)
{
 int v4; // eax __int16 Result; // di unsigned __int8 Result; // bl _BYTE *v8; // rbp signed __int64 result; // rax signed __int64 Result; // rbx char Result; // [rsp+60h] [rbp+8h] BYREF v4 = *(_DWORD *)(n0x8000 + 5000); /*0x283a*/
 Result = 0; /*0x2846*/
 Result = 0; /*0x284a*/
 if ( v4 == 1 ) /*0x2850*/
 {
 Result = 0; /*0x2863*/
 Result = 0; /*0x2867*/
 }
 else if ( (unsigned int)(v4 - 2) <= 9 ) /*0x2858*/
 {
 Result = -12288; /*0x285a*/
 Result = 1; /*0x285f*/
 }
 v8 = (_BYTE *)(n0x8000 + 220); /*0x286a*/
 RtkUsbUndiZeroMem(n0x8000 + 220, 0x20u, a3, a4); /*0x2879*/
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 6u, Result, 0, Result, &Result, 2); /*0x28a2*/
 Result = result; /*0x28a7*/
 if ( result >= 0 ) /*0x28ad*/
 {
 RtkUsbUndiCopyMem(v8, &Result, 6, a4); /*0x28bd*/
 RtkUsbUndiCopyMem((_BYTE *)(n0x8000 + 252), v8, 6, a4); /*0x28d2*/
 return Result; /*0x28d7*/
 }
 return result; /*0x28e4*/
}

// RtkUsbUndiPhySetup @ 0x28f0 __int64 RtkUsbUndiPhySetup(_BYTE *n0x8000, __int64 a2, __int64 a3, double a4)
{
 unsigned int v4; // edx __int16 *p_i; // rdi __int64 v7; // r9 unsigned __int8 *v8; // r11 unsigned int v9; // ecx unsigned __int8 *v10; // r10 __int64 n6; // rbp unsigned __int8 v12; // si __int64 n8; // r14 int v14; // r8d unsigned __int8 v15; // al int v16; // r8d unsigned int v17; // r10d __int64 Index; // r8 unsigned __int64 i; // rcx int v20; // eax int v21; // eax __int64 v22; // rcx unsigned __int64 Index; // r8 int v24; // eax int v25; // eax unsigned int v27; // [rsp+40h] [rbp+8h] BYREF unsigned int v28; // [rsp+48h] [rbp+10h] BYREF v4 = 0; /*0x2902*/
 p_i = (__int16 *)(n0x8000 + 4488); /*0x2904*/
 *((_QWORD *)n0x8000 + 561) = 0; /*0x290e*/
 v7 = (unsigned __int8)n0x8000[4604]; /*0x2911*/
 if ( n0x8000[4604] ) /*0x2911*/
 {
 v8 = &n0x8000[32 * (unsigned __int8)n0x8000[4604] + 4606]; /*0x2930*/
 do /*0x29b5*/
 {
 v9 = -1; /*0x2933*/
 v10 = v8; /*0x2936*/
 n6 = 6; /*0x2939*/
 do /*0x2974*/
 {
 v12 = *v10; /*0x293e*/
 n8 = 8; /*0x2941*/
 do /*0x296c*/
 {
 v14 = v9; /*0x2947*/
 v15 = v12; /*0x294a*/
 v9 *= 2; /*0x294e*/
 v12 >>= 1; /*0x2954*/
 v16 = (v15 ^ (v14 < 0)) & 1; /*0x295a*/
 if ( v16 ) /*0x295e*/
 v9 = v16 | v9 ^ 0x4C11DB6; /*0x2966*/
 --n8; /*0x2969*/
 }
 while ( n8 ); /*0x296c*/
 ++v10; /*0x296e*/
 --n6; /*0x2971*/
 }
 while ( n6 ); /*0x2974*/
 v8 -= 32; /*0x29a4*/
 n0x8000[((unsigned __int8)((v9 >> 26) & 0x3F) >> 3) + 4488] |= 1 << ((v9 >> 26) & 7); /*0x29aa*/
 --v7; /*0x29b2*/
 }
 while ( v7 ); /*0x29b5*/
 }
 v17 = 0; /*0x29bb*/
 Index = 0; /*0x29be*/
 for ( i = 0; i < 0x20; i += 8LL ) /*0x29c1*/
 {
 v20 = *((unsigned __int8 *)p_i + Index++); /*0x29c4*/
 v21 = v20 << i; /*0x29cc*/
 v17 += v21; /*0x29d2*/
 }
 v22 = 0; /*0x29e0*/
 Index = 4; /*0x29e3*/
 do /*0x29fa*/
 {
 v24 = *((unsigned __int8 *)p_i + Index++); /*0x29e6*/
 v25 = v24 << v22; /*0x29ee*/
 v22 += 8; /*0x29f0*/
 v4 += v25; /*0x29f4*/
 }
 while ( Index < 8 ); /*0x29fa*/
 v28 = (((v17 << 16) | v17 & 0xFF00) << 8) | ((HIWORD(v17) | v17 & 0xFF0000) >> 8); /*0x2a38*/
 v27 = (((v4 << 16) | v4 & 0xFF00) << 8) | ((HIWORD(v4) | v4 & 0xFF0000) >> 8); /*0x2a59*/
 RtkUsbUndiCopyMem(p_i, &v27, 4, a4); /*0x2a60*/
 RtkUsbUndiCopyMem(n0x8000 + 4492, &v28, 4, a4); /*0x2a74*/
 return RtkUsbUndiSetRxFilter((__int64)n0x8000, p_i); /*0x2a89*/
}

// RtkUsbUndiPhyGetStatus @ 0x2a98 __int64 RtkUsbUndiPhyGetStatus(__int64 n0x8000)
{
 int v1; // eax __int64 Result; // rdx int Status; // [rsp+50h] [rbp+8h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x2a9e*/
 Result = 0; /*0x2aa4*/
 Status = 0; /*0x2aa9*/
 if ( v1 == 1 ) /*0x2ab0*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 0, 0, 0, (_BYTE *)(n0x8000 + 252), 2); /*0x2bc7*/
 if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2abc*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59420, 0, 1u, &Status, 2); /*0x2aeb*/
 if ( Result >= 0 ) /*0x2af1*/
 {
 Status |= 0xC0u; /*0x2af7*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59420, 15, 1u, &Status, 2); /*0x2b2d*/
 if ( Result >= 0 ) /*0x2b33*/
 {
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 49152, 63, 1u, (_BYTE *)(n0x8000 + 252), 2); /*0x2b69*/
 if ( Result >= 0 ) /*0x2b6f*/
 {
 Status &= 0xFFFFFF3F; /*0x2b71*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59420, 15, 1u, &Status, 2); /*0x2bcc*/
 }
 }
 }
 }
 return Result; /*0x2bd2*/
}

// RtkUsbUndiPhyFullInit @ 0x2bd8 __int64 RtkUsbUndiPhyFullInit(__int64 n0x8000)
{
 int v1; // eax char Index; // r14 __int64 Result; // rdx __int64 result; // rax int Result; // [rsp+60h] [rbp+20h] BYREF unsigned int v7; // [rsp+68h] [rbp+28h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x2bed*/
 Result = 0; /*0x2bf3*/
 Index = 0; /*0x2bf7*/
 Result = 0; /*0x2bfa*/
 if ( v1 == 1 ) /*0x2c02*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 9081, 0, 0, &Result, 2); /*0x2d12*/
 v7 = Result | 2; /*0x2d29*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 9081, 0, 0, &v7, 2); /*0x2d3f*/
 while ( 1 ) /*0x2d4b*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x2d4b*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(20000); /*0x2d52*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 20000); /*0x2d66*/
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 9081, 0, 0, &Result, 2); /*0x2d8c*/
 if ( result < 0 ) /*0x2d94*/
 break; /*0x2d94*/
 if ( Result < 0 ) /*0x2d9d*/
 return 0; /*0x2db4*/
 if ( (unsigned __int8)++Index > 0x64u ) /*0x2da6*/
 return 0x8000000000000007uLL; /*0x2db2*/
 }
 }
 else
 {
 if ( (unsigned int)(v1 - 2) <= 9 ) /*0x2c0e*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59408, 0, 1u, &Result, 2); /*0x2c3f*/
 if ( Result >= 0 ) /*0x2c45*/
 {
 v7 = Result | 0xC000000; /*0x2c60*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59408, 15, 1u, &v7, 2); /*0x2c79*/
 if ( Result >= 0 ) /*0x2c7f*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59480, 0, 1u, &Result, 2); /*0x2cad*/
 if ( Result >= 0 ) /*0x2cb3*/
 {
 v7 = Result & 0xFFF7FFFF; /*0x2ccd*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59480, 15, 1u, &v7, 2); /*0x2ce6*/
 }
 }
 }
 }
 return Result; /*0x2db6*/
 }
 return result; /*0x2dc3*/
}

// RtkUsbUndiPhyCheckLink @ 0x2dcc __int64 RtkUsbUndiPhyCheckLink(__int64 n0x8000, int a2, __int64 a3, _QWORD *p_n0x8800)
{
 __int64 v7; // rcx __int64 v8; // r10 int *p_n64; // rdx __int64 v10; // rax char n64_1; // cl __int64 Result; // rbx int n64; // [rsp+58h] [rbp+20h] BYREF if ( !*p_n0x8800 ) /*0x2de0*/
 return 0; /*0x2ded*/
 if ( a2 ) /*0x2df4*/
 v7 = n0x8000 + 4887; /*0x2dff*/
 else v7 = n0x8000 + 4880; /*0x2df6*/
 v8 = *(_QWORD *)(n0x8000 + 4872); /*0x2e06*/
 n64 = 0; /*0x2e11*/
 p_n64 = &n64; /*0x2e16*/
 LOBYTE(p_n64) = *(_BYTE *)(v7 + 2); /*0x2e20*/
 v10 = (*(__int64 ( **)(__int64, int *))(v8 + 8))(v8, p_n64); /*0x2e2b*/
 n64_1 = n64; /*0x2e2f*/
 Result = v10; /*0x2e33*/
 if ( !a2 && (v10 < 0 || n64) ) /*0x2e4b*/
 {
 if ( n64 == 64 ) /*0x2e50*/
 {
 RtkUsbUndiResetLink(n0x8000); /*0x2e55*/
 n64_1 = n64; /*0x2e5a*/
 Result = 0x8000000000000006uLL; /*0x2e5e*/
 goto LABEL_14; /*0x2e61*/
 }
 if ( n64 != 16 ) /*0x2e66*/
 {
 RtkUsbUndiResetLink(n0x8000); /*0x2e6b*/
 n64_1 = n64; /*0x2e70*/
 }
 }
 if ( Result < 0 ) /*0x2e77*/
 {
LABEL_14:
 if ( (n64_1 & 2) == 0 && (n64_1 & 0x10) != 0 ) /*0x2e81*/
 return 0x8000000000000006uLL; /*0x2e81*/
 }
 return Result; /*0x2e97*/
}

// RtkUsbUndiPhyConfigureEx @ 0x2ea0 __int64 RtkUsbUndiPhyConfigureEx(__int64 n0x8000, __int64 paddingArg1, __int64 paddingArg2, double a4)
{
 unsigned __int64 i; // rdi int chipVersion; // eax __int16 n9081; // di unsigned __int8 n15; // si __int64 padArg1; // rdx __int64 padArg2; // r8 int padArg3; // r9d int n6; // ecx int regVal; // eax unsigned int regVal_2; // eax __int64 n26; // rcx _BYTE *nvmDataPtr; // rax __int64 spinArg1; // rdx __int64 spinArg2; // r8 int chipVerCheck; // eax unsigned int regVal_1; // [rsp+70h] [rbp+30h] BYREF unsigned int phyRegWr; // [rsp+78h] [rbp+38h] BYREF

 *(_QWORD *)(n0x8000 + 336) = 0; /*0x2ec3*/
 if ( !*(_BYTE *)(n0x8000 + 4592) && (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 2 ) /*0x2edf*/
 RtkUsbUndiInitPhyProgram(n0x8000); /*0x2ee1*/
 if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x2efb*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 50160, 0, 0, &regVal_1, 2); /*0x2f23*/
 if ( (regVal_1 & 0xFFFF0000) == 0xD4500000 ) /*0x2f35*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &regVal_1, 2); /*0x2f5f*/
 phyRegWr = regVal_1 | 0x8000; /*0x2f76*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &phyRegWr, 2); /*0x2f8d*/
 phyRegWr = 0; /*0x2faf*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 50160, 15, 0, &phyRegWr, 2); /*0x2fb8*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &regVal_1, 2); /*0x2fdc*/
 phyRegWr = regVal_1 & 0xFFFF7FFF; /*0x2ff0*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &phyRegWr, 2); /*0x300a*/
 }
 }
 if ( !*(_BYTE *)(n0x8000 + 4520) ) /*0x300f*/
 *(_DWORD *)(n0x8000 + 4512) = 1; /*0x3018*/
 RtkUsbUndiWaitForNvram(n0x8000, paddingArg1, paddingArg2, a4); /*0x3025*/
 *(_QWORD *)(n0x8000 + 5352) = 0; /*0x302f*/
 *(_QWORD *)(n0x8000 + 5336) = 0; /*0x3036*/
 *(_QWORD *)(n0x8000 + 5320) = 0; /*0x303d*/
 *(_QWORD *)(n0x8000 + 5304) = 0; /*0x3044*/
 *(_QWORD *)(n0x8000 + 5288) = 0; /*0x304b*/
 *(_QWORD *)(n0x8000 + 5272) = 0; /*0x3052*/
 RtkUsbUndiPhySetPower(n0x8000, 1); /*0x3059*/
 RtkUsbUndiOcpInit(n0x8000); /*0x3061*/
 RtkUsbUndiMcastDisableAll(n0x8000); /*0x3069*/
 RtkUsbUndiClearStatus(n0x8000); /*0x3071*/
 if ( *(_DWORD *)(n0x8000 + 5000) != 1 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, &regVal_1, 2) >= 0 ) /*0x30b0*/
 {
 phyRegWr = regVal_1 & 0x7FFFFFFF; /*0x30cb*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59468, 15, 1u, &phyRegWr, 2) >= 0 /*0x3119*/
 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59612, 0, 1u, &regVal_1, 2) >= 0 )
 {
 phyRegWr = regVal_1 & 0xBFFFFFFF; /*0x3134*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59612, 15, 1u, &phyRegWr, 2) >= 0 ) /*0x3150*/
 {
 for ( i = 0; i <= 0x64; ++i ) /*0x3152*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, &regVal_1, 2) < 0 || (regVal_1 & 0x2000000) != 0 ) /*0x318d*/
 break; /*0x318d*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x3199*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x319e*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x31b0*/
 }
 }
 }
 }
 RtkUsbUndiConfigurePhy(n0x8000); /*0x31bf*/
 RtkUsbUndiSetSpeed(n0x8000); /*0x31c7*/
 RtkUsbUndiHwInit(n0x8000); /*0x31cf*/
 RtkUsbUndiSetStationAddress(n0x8000); /*0x31d7*/
 chipVersion = *(_DWORD *)(n0x8000 + 5000); /*0x31dc*/
 regVal_1 = 0; /*0x31e2*/
 n9081 = 0; /*0x31e6*/
 n15 = 0; /*0x31ea*/
 if ( chipVersion == 1 ) /*0x31fa*/
 {
 n9081 = 9081; /*0x3208*/
 goto LABEL_25; /*0x3208*/
 }
 if ( (unsigned int)(chipVersion - 2) <= 9 ) /*0x3202*/
 {
 n9081 = -11260; /*0x3204*/
LABEL_25:
 n15 = 0; /*0x320b*/
 }
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, n9081, 0, 0, &regVal_1, 2) < 0 ) /*0x3236*/
 goto LABEL_41; /*0x3236*/
 n6 = *(_DWORD *)(n0x8000 + 5000); /*0x323c*/
 regVal = regVal_1; /*0x3242*/
 if ( n6 == 1 ) /*0x324b*/
 {
 n9081 = 9081; /*0x3283*/
 n15 = 0; /*0x3288*/
 if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x328b*/
 regVal_2 = regVal_1 | 0x3000000; /*0x3294*/
 else regVal_2 = regVal_1 & 0xFCFFFFFF | 0x1000000; /*0x329a*/
 goto LABEL_39; /*0x3298*/
 }
 if ( n6 > 1 ) /*0x324d*/
 {
 if ( n6 <= 6 ) /*0x3252*/
 goto LABEL_32; /*0x3252*/
 if ( n6 <= 9 ) /*0x3257*/
 goto LABEL_33; /*0x3257*/
 if ( n6 <= 11 ) /*0x325c*/
 {
LABEL_32:
 regVal = regVal_1 | 0x800000; /*0x325e*/
LABEL_33:
 n15 = 15; /*0x3262*/
 n9081 = -11260; /*0x3265*/
 if ( *(_BYTE *)(n0x8000 + 5426) ) /*0x326a*/
 regVal_2 = regVal & 0xFFEFFFFF; /*0x3273*/
 else regVal_2 = regVal | 0x100000; /*0x3279*/
LABEL_39:
 regVal_1 = regVal_2; /*0x329e*/
 }
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, n9081, n15, 0, &regVal_1, 2); /*0x32a1*/
LABEL_41:
 if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x32c7*/
 RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x32e1*/
 RtkUsbUndiMacInitLink(n0x8000, padArg1, padArg2, padArg3); /*0x32e9*/
 RtkUsbUndiPhyFullInit(n0x8000); /*0x32f1*/
 n26 = 26; /*0x32fa*/
 *(_DWORD *)(n0x8000 + 284) = -1; /*0x32ff*/
 *(_WORD *)(n0x8000 + 288) = -1; /*0x3305*/
 nvmDataPtr = (_BYTE *)(n0x8000 + 226); /*0x330c*/
 do /*0x3324*/
 {
 nvmDataPtr[32] = 0; /*0x3313*/
 *nvmDataPtr = 0; /*0x3317*/
 nvmDataPtr[64] = 0; /*0x331a*/
 ++nvmDataPtr; /*0x331e*/
 --n26; /*0x3321*/
 }
 while ( n26 ); /*0x3324*/
 RtkUsbUndiPhySetPower(n0x8000, 0); /*0x332b*/
 RtkUsbUndiMcastEnableAll(n0x8000); /*0x3333*/
 if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x3338*/
 RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)(n0x8000 + 4992), (unsigned int *)(n0x8000 + 212)); /*0x3352*/
 if ( *(_BYTE *)(n0x8000 + 4992) ) /*0x3357*/
 *(_DWORD *)(n0x8000 + 208) |= 4u; /*0x3360*/
 else
 *(_DWORD *)(n0x8000 + 208) &= ~4u; /*0x3369*/
 *(_WORD *)(n0x8000 + 4496) = 2; /*0x3370*/
 if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x3378*/
 {
 LOBYTE(spinArg1) = *(_BYTE *)(n0x8000 + 5135); /*0x3388*/
 LOBYTE(spinArg2) = 1; /*0x33a5*/
 (*(void ( **)(_QWORD, __int64, __int64, __int64, __int64, unsigned __int64 ( *)(__int64, __int64, __int64), __int64))(*(_QWORD *)(n0x8000 + 4872) + 16LL))( /*0x33b1*/
 *(_QWORD *)(n0x8000 + 4872),
 spinArg1,
 spinArg2,
 4,
 10,
 RtkUsbUndiInterruptHandler,
 n0x8000);
 }
 chipVerCheck = *(_DWORD *)(n0x8000 + 5000); /*0x33b4*/
 *(_QWORD *)(n0x8000 + 72) = 0; /*0x33ba*/
 *(_DWORD *)(n0x8000 + 4442) = 0; /*0x33be*/
 *(_WORD *)(n0x8000 + 4440) = 0; /*0x33c8*/
 if ( (unsigned int)(chipVerCheck - 10) <= 1 ) /*0x33d3*/
 RtkUsbUndiInitLed(n0x8000); /*0x33d8*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x33e4*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(5000); /*0x33eb*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 5000); /*0x33ff*/
 return 0; /*0x3416*/
}

// RtkUsbUndiPhyRegsConfig1 @ 0x3424 __int64 RtkUsbUndiPhyRegsConfig1(__int64 n0x8000, __int64 **p_i, char *descDst, double a4)
{
 _BYTE *i; // r14 __int16 v5; // di unsigned __int64 n0x3C; // r15 unsigned __int16 Result; // bp unsigned __int16 n60; // si int v11; // eax _BYTE *v12; // rdx _BYTE *v13; // rcx __int64 p_n0x8800_2; // rax __int64 p_n0x8800_1; // rax __int64 v16; // rax __int64 v17; // rax __int16 n511; // ax __int64 p_n0x8800; // [rsp+60h] [rbp+8h] BYREF i = *p_i; /*0x3449*/
 v5 = 0; /*0x344c*/
 n0x3C = *((unsigned __int16 *)p_i + 4) + *((unsigned __int16 *)p_i + 6); /*0x3454*/
 Result = 0; /*0x345a*/
 if ( (*(_BYTE *)(n0x8000 + 5428) || *(_BYTE *)(n0x8000 + 5444)) && RtkUsbUndiSetMem(i, i + 6, 6, a4) ) /*0x347c*/
 return 3; /*0x348b*/
 n60 = 60; /*0x3490*/
 if ( n0x3C < 0x3C ) /*0x349c*/
 {
LABEL_9:
 if ( *(_WORD *)(n0x8000 + 4468) ) /*0x34b8*/
 RtkUsbUndiIsZero( /*0x34d8*/
 (__int16 *)(*(_QWORD *)(n0x8000 + 104)
 + *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332)),
 *(unsigned __int16 *)(n0x8000 + 4468),
 0,
 a4);
 v11 = *(_DWORD *)(n0x8000 + 5000); /*0x34ee*/
 v12 = (_BYTE *)(*(_QWORD *)(n0x8000 + 104) /*0x34f7*/
 + *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332));
 v13 = &v12[*(unsigned __int8 *)(n0x8000 + 4474)]; /*0x3502*/
 if ( v11 == 1 ) /*0x3508*/
 {
 *v12 = n60; /*0x355c*/
 v12[3] = 48; /*0x3563*/
 v12[1] = HIBYTE(n60); /*0x3567*/
 RtkUsbUndiCopyMem(v13, i, n60, a4); /*0x3572*/
 p_n0x8800_1 = n60 + *(unsigned __int8 *)(n0x8000 + 4474); /*0x3588*/
 p_n0x8800 = p_n0x8800_1; /*0x358a*/
 if ( (p_n0x8800_1 & 0x1FF) == 0 ) /*0x3592*/
 {
 p_n0x8800_2 = p_n0x8800_1 + 1; /*0x3594*/
LABEL_21:
 p_n0x8800 = p_n0x8800_2; /*0x3597*/
 }
 }
 else
 {
 if ( (unsigned int)(v11 - 2) <= 9 ) /*0x3510*/
 {
 *v12 = n60; /*0x3519*/
 v12[3] = -64; /*0x3520*/
 v12[1] = HIBYTE(n60); /*0x3524*/
 RtkUsbUndiCopyMem(v13, i, n60, a4); /*0x352f*/
 p_n0x8800_2 = n60 + *(unsigned __int8 *)(n0x8000 + 4474); /*0x3545*/
 goto LABEL_21; /*0x3547*/
 }
 p_n0x8800 = 0; /*0x3549*/
 }
 v16 = *((unsigned int *)p_i + 2); /*0x359c*/
 if ( *i == 0xFF && i[1] == 0xFF ) /*0x35ac*/
 {
 ++*(_QWORD *)(n0x8000 + 5304); /*0x35ae*/
 *(_QWORD *)(n0x8000 + 5312) += v16; /*0x35b5*/
 }
 else if ( (*i & 1) != 0 ) /*0x35c1*/
 {
 ++*(_QWORD *)(n0x8000 + 5288); /*0x35c3*/
 *(_QWORD *)(n0x8000 + 5296) += v16; /*0x35ca*/
 }
 else
 {
 ++*(_QWORD *)(n0x8000 + 5272); /*0x35d3*/
 *(_QWORD *)(n0x8000 + 5280) += v16; /*0x35da*/
 }
 v17 = RtkUsbUndiPhyCheckLink( /*0x360c*/
 n0x8000,
 1,
 *(_QWORD *)(n0x8000 + 104) + *(unsigned __int16 *)(n0x8000 + 4468) * *(unsigned __int16 *)(n0x8000 + 332),
 &p_n0x8800);
 *(_WORD *)(n0x8000 + 332) = (*(unsigned __int16 *)(n0x8000 + 332) + 1) % 496; /*0x363d*/
 if ( v17 < 0 ) /*0x3648*/
 Result = 10; /*0x364a*/
 goto LABEL_30; /*0x364a*/
 }
 if ( n0x3C <= 0x7D0 ) /*0x34a5*/
 {
 n60 = n0x3C; /*0x34b4*/
 goto LABEL_9; /*0x34b4*/
 }
 Result = 12; /*0x34a7*/
LABEL_30:
 *(_QWORD *)(n0x8000 + 8LL * *(unsigned __int16 *)(n0x8000 + 4442) + 344) = *p_i; /*0x364f*/
 n511 = *(_WORD *)(n0x8000 + 4442); /*0x3662*/
 ++*(_WORD *)(n0x8000 + 4444); /*0x3669*/
 if ( n511 != 511 ) /*0x3674*/
 v5 = n511 + 1; /*0x3679*/
 *(_WORD *)(n0x8000 + 4442) = v5; /*0x367c*/
 return Result; /*0x3695*/
}

// RtkUsbUndiPhyRegsConfig2 @ 0x36a4 __int64 RtkUsbUndiPhyRegsConfig2(__int64 n0x8000, __int16 a2, __int64 a3, unsigned int a4)
{
 double v4; // xmm3_8 int v5; // eax unsigned __int16 Index; // bx __int16 v9; // si __int16 Result; // r14 __int16 Result; // r15 unsigned __int8 Result; // bp __int64 v14; // rdx __int64 v15; // r8 __int16 v16; // ax unsigned int n8_1; // r13d __int16 v18; // bx int v19; // eax __int64 result; // rax __int16 i; // [rsp+80h] [rbp+8h] BYREF __int16 v22; // [rsp+88h] [rbp+10h]
 __int16 v23; // [rsp+90h] [rbp+18h]

 v22 = a2; /*0x36a9*/
 v5 = *(_DWORD *)(n0x8000 + 5000); /*0x36bd*/
 Index = 0; /*0x36c3*/
 v9 = a2; /*0x36ce*/
 Result = 0; /*0x36d4*/
 Result = 0; /*0x36d8*/
 Result = 0; /*0x36dc*/
 if ( v5 == 1 ) /*0x36ea*/
 {
 Result = 68; /*0x36ff*/
 Result = 0; /*0x3703*/
 Result = 0; /*0x3707*/
 }
 else if ( (unsigned int)(v5 - 2) <= 9 ) /*0x36f2*/
 {
 Result = -16368; /*0x36f4*/
 Result = 0; /*0x36f7*/
 Result = 1; /*0x36fa*/
 }
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, Result, 0, Result, &i, 2); /*0x3731*/
 *(_WORD *)(n0x8000 + 4496) = v9; /*0x3739*/
 v16 = v9 & 4; /*0x3740*/
 v23 = v16; /*0x3744*/
 if ( (v9 & 4) != 0 || a3 ) /*0x3751*/
 {
 if ( a3 ) /*0x375a*/
 {
 n8_1 = a4 >> 5; /*0x375c*/
 *(_WORD *)(n0x8000 + 4604) = n8_1; /*0x3762*/
 if ( (_WORD)n8_1 ) /*0x376e*/
 {
 do /*0x37a4*/
 {
 if ( Index >= 8u ) /*0x3776*/
 break; /*0x3776*/
 RtkUsbUndiCopyMem((_BYTE *)(32LL *Index + n0x8000 + 4606), (_BYTE *)(32LL *Index + a3), 32, v4); /*0x3793*/
 ++Index; /*0x379d*/
 }
 while ( Index < (unsigned __int16)n8_1 ); /*0x37a4*/
 v9 = v22; /*0x37a6*/
 v16 = v23; /*0x37ae*/
 }
 }
 if ( v16 ) /*0x37c1*/
 {
 *(_WORD *)(n0x8000 + 4496) |= 4u; /*0x37c3*/
 RtkUsbUndiPhySetup((_BYTE *)n0x8000, v14, v15, v4); /*0x37ce*/
 }
 else
 {
 *(_WORD *)(n0x8000 + 4496) &= ~4u; /*0x37da*/
 }
 }
 v18 = i & 0xFFC0; /*0x37f9*/
 *(_WORD *)(n0x8000 + 4496) = v9; /*0x37fc*/
 if ( v9 ) /*0x3806*/
 {
 if ( (v9 & 1) != 0 ) /*0x3819*/
 v18 |= 2u; /*0x381b*/
 if ( (v9 & 2) != 0 ) /*0x3826*/
 v18 |= 8u; /*0x3828*/
 if ( (v9 & 8) != 0 ) /*0x382e*/
 {
 RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x383e*/
 RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x384e*/
 v18 |= 0x3Fu; /*0x3853*/
 }
 if ( (v9 & 0x10) != 0 ) /*0x3860*/
 {
 RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x3870*/
 RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x3880*/
 v18 |= 4u; /*0x3885*/
 }
 if ( v23 ) /*0x3892*/
 v18 |= 4u; /*0x3894*/
 }
 RtkUsbUndiIsZero(&i, 8, 255, v4); /*0x38a8*/
 RtkUsbUndiSetRxFilter(n0x8000, &i); /*0x38b8*/
 v19 = *(_DWORD *)(n0x8000 + 5000); /*0x38bd*/
 i = v18 | 0xE; /*0x38c7*/
 if ( v19 == 1 ) /*0x38d6*/
 {
 Result = 68; /*0x38ef*/
 Result = 0; /*0x38f5*/
 Result = 0; /*0x38f9*/
 }
 else if ( (unsigned int)(v19 - 2) <= 9 ) /*0x38de*/
 {
 Result = -16368; /*0x38e0*/
 Result = 3; /*0x38e6*/
 Result = 1; /*0x38ea*/
 }
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, Result, Result, Result, &i, 2); /*0x3925*/
 *(_BYTE *)(n0x8000 + 5449) = 1; /*0x392a*/
 return result; /*0x3938*/
}

// RtkUsbUndiPhyConfigGiga @ 0x3948 __int64 RtkUsbUndiPhyConfigGiga(__int64 n0x8000, char **p_i, _QWORD *gigaCfgBuf, double a4)
{
 bool isDescr8168; // zf unsigned __int16 n19; // si unsigned __int16 descCount; // ax int descIndex; // eax __int16 p_n0x8800_1; // r9 unsigned __int64 remainder; // rdx __int64 descNum; // rcx unsigned __int16 descSizeCur; // r8 _WORD *maxPktPtr; // rdx unsigned __int16 maxPktSize; // r12 unsigned __int16 MaxPacketSize_1; // ax __int16 zeroVal; // r11 char *i; // rcx _BYTE *i_1; // rcx __int64 totalBytes; // rax __int64 descrIdx; // rcx int excessBytes; // edx __int64 descrBase; // rax __int64 descrIdx2; // r9 __int64 descrBase2; // r10 __int64 descrBase1; // rax unsigned __int16 descrCurSize; // r8 int descrIdx3; // eax _WORD *maxPktCalcPtr; // rdx unsigned __int16 maxPktCalcVal; // bp __int64 copyDst; // r9 __int64 copySrc; // r10 __int64 i_2; // rax char bufByte; // dl int nextDescIdx; // eax unsigned __int16 MaxPacke... [10159 chars total]

// RtkUsbUndiResetLink @ 0x3ec4 __int64 RtkUsbUndiResetLink(__int64 n0x8000)
{
 int v2; // ebx unsigned int v4; // [rsp+78h] [rbp+38h] BYREF int v5; // [rsp+80h] [rbp+40h] BYREF RtkUsbUndiMcastDisableAll(n0x8000); /*0x3edb*/
 RtkUsbUndiPhySetPower(n0x8000, 1); /*0x3ee5*/
 RtkUsbUndiConfigurePhy(n0x8000); /*0x3eed*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &v5, 2); /*0x3f1f*/
 v2 = v5; /*0x3f24*/
 v4 = v5 & 0xFFFFFFFE; /*0x3f3f*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &v4, 2); /*0x3f50*/
 v4 = v2 | 1; /*0x3f79*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &v4, 2); /*0x3f7c*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &v5, 2); /*0x3fa6*/
 v4 = v5 & 0xFFFFFFFC; /*0x3fbe*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &v4, 2); /*0x3fd8*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &v5, 2); /*0x3ffc*/
 v4 = v5 | 3; /*0x400c*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &v4, 2); /*0x4028*/
 RtkUsbUndiPhyFullInit(n0x8000); /*0x4030*/
 RtkUsbUndiPhySetPower(n0x8000, 0); /*0x403a*/
 return RtkUsbUndiMcastEnableAll(n0x8000); /*0x4047*/
}

// RtkUsbUndiInterruptHandler @ 0x4058 unsigned __int64 RtkUsbUndiInterruptHandler(__int64 a1, __int64 n10, __int64 a3)
{
 if ( n10 == 10 ) /*0x4060*/
 {
 *(_QWORD *)(a3 + 5376) = *(_QWORD *)a1; /*0x4066*/
 *(_WORD *)(a3 + 5384) = *(_WORD *)(a1 + 8); /*0x4073*/
 return 0; /*0x407b*/
 }
 else
 {
 RtkUsbUndiSerialPrint( /*0x4086*/
 MEMORY[0xD470], // "Wrong Interrupt size\n"
 n10,
 a3); // "Wrong Interrupt size\n"
 return 0x8000000000000007uLL; /*0x408b*/
 }
}

// RtkUsbUndiGetInfo @ 0x409c __int64 RtkUsbUndiGetInfo(_QWORD *a1, _BYTE *a2, __int64 n520, double a4)
{
 unsigned __int16 n520_1; // r12 __int64 result; // rax __int64 v7; // r15 __int64 v8; // rdi __int64 v9; // rbx __int64 v10; // r9 __int64 v11; // r14 __int64 v12; // r11 __int64 v13; // rsi __int64 v14; // r10 __int64 v15; // rdx __int64 i[66]; // [rsp+20h] [rbp-E0h] BYREF n520_1 = n520; /*0x40d3*/
 RtkUsbUndiZeroMem((__int64)i, 0x208u, n520, a4); /*0x40d7*/
 result = 0; /*0x40dc*/
 if ( n520_1 ) /*0x40e2*/
 {
 v7 = a1[667]; /*0x4113*/
 v8 = a1[665]; /*0x411a*/
 v9 = a1[661]; /*0x4121*/
 v10 = a1[659]; /*0x4128*/
 v11 = a1[669]; /*0x412f*/
 v12 = a1[663]; /*0x4136*/
 v13 = v11 + v8 + v7; /*0x415d*/
 v14 = a1[666] + a1[668] + a1[670]; /*0x4160*/
 v15 = a1[660] + a1[662] + a1[664]; /*0x4167*/
 a1[657] = v14; /*0x417a*/
 a1[658] = v15; /*0x4181*/
 i[10] = v14; /*0x4188*/
 i[20] = v15; /*0x418d*/
 a1[643] = v13; /*0x4191*/
 a1[644] = v13; /*0x4198*/
 a1[646] = v8; /*0x419f*/
 a1[647] = v11; /*0x41a6*/
 a1[648] = v7; /*0x41ad*/
 a1[650] = v13; /*0x41b4*/
 a1[651] = v12 + v10 + v9; /*0x41bb*/
 a1[652] = v10; /*0x41c2*/
 a1[653] = v12; /*0x41c9*/
 a1[654] = v9; /*0x41d0*/
 i[0] = 757475; /*0x41d7*/
 i[1] = v13; /*0x41e0*/
 i[2] = v13; /*0x41e5*/
 i[6] = v8; /*0x41ea*/
 i[7] = v11; /*0x41ef*/
 i[8] = v7; /*0x41f4*/
 i[11] = v13; /*0x41f9*/
 i[12] = v12 + v10 + v9; /*0x41fe*/
 i[16] = v10; /*0x4202*/
 i[17] = v12; /*0x4206*/
 i[18] = v9; /*0x420a*/
 if ( n520_1 > 0x208u ) /*0x4212*/
 n520_1 = 520; /*0x4214*/
 RtkUsbUndiCopyMem(a2, i, n520_1, a4); /*0x422e*/
 return 0; /*0x4233*/
 }
 else
 {
 a1[669] = 0; /*0x40e4*/
 a1[667] = 0; /*0x40eb*/
 a1[665] = 0; /*0x40f2*/
 a1[663] = 0; /*0x40f9*/
 a1[661] = 0; /*0x4100*/
 a1[659] = 0; /*0x4107*/
 }
 return result; /*0x424a*/
}

// RtkUsbUndiMcastDisableAll @ 0x4258 __int64 RtkUsbUndiMcastDisableAll(__int64 n0x8000)
{
 int v1; // eax __int64 Result; // rdx int Status; // [rsp+50h] [rbp+8h] BYREF v1 = *(_DWORD *)(n0x8000 + 5000); /*0x425e*/
 Status = 0; /*0x4264*/
 Result = 0; /*0x4269*/
 if ( v1 != 1 && (unsigned int)(v1 - 2) <= 9 ) /*0x4279*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49168, 0, 1u, &Status, 2); /*0x42a4*/
 if ( Result >= 0 ) /*0x42aa*/
 {
 Status &= 0xFFFFFFF0; /*0x42ac*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49168, 3, 1u, &Status, 2); /*0x42df*/
 }
 }
 return Result; /*0x42e5*/
}

// RtkUsbUndiMcastEnableAll @ 0x42ec __int64 RtkUsbUndiMcastEnableAll(__int64 n0x8000)
{
 int n2; // eax __int64 Result; // rdx unsigned int Status; // [rsp+50h] [rbp+8h] BYREF n2 = *(_DWORD *)(n0x8000 + 5000); /*0x42f2*/
 Status = 0; /*0x42f8*/
 Result = 0; /*0x42fd*/
 if ( n2 >= 2 && (n2 <= 6 || (unsigned int)(n2 - 7) <= 4) ) /*0x4326*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49168, 0, 1u, &Status, 2); /*0x4351*/
 if ( Result >= 0 ) /*0x4357*/
 {
 Status = Status & 0xFFFFFFF0 | 0xE; /*0x437e*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49168, 3, 1u, &Status, 2); /*0x4396*/
 }
 }
 return Result; /*0x439c*/
}

// RtkUsbUndiSetRxFilter @ 0x43a4 __int64 RtkUsbUndiSetRxFilter(__int64 n0x8000, __int16 *p_i)
{
 int v2; // eax unsigned __int8 Status; // r8 __int16 Status; // r10 __int16 Status; // r9 v2 = *(_DWORD *)(n0x8000 + 5000); /*0x43a8*/
 Status = 0; /*0x43ae*/
 Status = 0; /*0x43b4*/
 Status = 0; /*0x43b8*/
 if ( v2 == 1 ) /*0x43c3*/
 {
 Status = 8; /*0x43de*/
 Status = 0; /*0x43e2*/
 }
 else if ( (unsigned int)(v2 - 2) <= 9 ) /*0x43cb*/
 {
 Status = -13056; /*0x43cd*/
 Status = 255; /*0x43d3*/
 Status = 1; /*0x43d9*/
 }
 return RtkUsbUndiControlTransferUsb3(n0x8000, 8u, Status, Status, Status, p_i, 2); /*0x4401*/
}

// RtkUsbUndiGetMaxPacketSize @ 0x4408 __int64 RtkUsbUndiGetMaxPacketSize(__int64 n0x8000, _WORD *maxPktCalcPtr)
{
 int v2; // eax unsigned __int16 Result; // r8 v2 = *(_DWORD *)(n0x8000 + 5000); /*0x4408*/
 Result = 0; /*0x440e*/
 if ( v2 == 1 ) /*0x4414*/
 {
 return *maxPktCalcPtr & 0x3FFF; /*0x443b*/
 }
 else if ( (unsigned int)(v2 - 2) <= 9 ) /*0x441c*/
 {
 return (unsigned __int16)((*maxPktCalcPtr & 0x7FFF) - 4); /*0x442b*/
 }
 return Result; /*0x4443*/
}

// RtkUsbUndiSetMaxPacketSize @ 0x4444 __int64 RtkUsbUndiSetMaxPacketSize(__int64 n0x8000, _WORD *maxPktPtr)
{
 int v2; // eax unsigned __int16 Result; // bx __int16 v4; // bx __int16 v5; // ax v2 = *(_DWORD *)(n0x8000 + 5000); /*0x444a*/
 Result = 0; /*0x4450*/
 if ( v2 == 1 ) /*0x445c*/
 {
 v4 = *(unsigned __int8 *)(n0x8000 + 4475); /*0x447d*/
 v5 = *maxPktPtr & 0x3FFF; /*0x448a*/
 }
 else
 {
 if ( (unsigned int)(v2 - 2) > 9 ) /*0x4464*/
 goto LABEL_6; /*0x4464*/
 v4 = *(unsigned __int8 *)(n0x8000 + 4475); /*0x4469*/
 v5 = *maxPktPtr & 0x7FFF; /*0x4475*/
 }
 Result = v5 + v4; /*0x448e*/
LABEL_6:
 if ( (unsigned __int16)(*maxPktPtr - 1) > 0x5F1u ) /*0x44a0*/
 RtkUsbUndiResetLink(n0x8000); /*0x44a5*/
 return Result; /*0x44ad*/
}

// RtkUsbUndiPhySetPower @ 0x44b4 __int64 RtkUsbUndiPhySetPower(__int64 a1, char a2)
{
 __int64 Result; // rcx int Status; // [rsp+50h] [rbp+8h] BYREF Result = 0; /*0x44c1*/
 if ( *(_DWORD *)(a1 + 5000) != 1 ) /*0x44d0*/
 {
 Result = RtkUsbUndiControlTransferUsb2(a1, 4u, 59480, 0, 1u, &Status, 2); /*0x44fd*/
 if ( Result >= 0 ) /*0x4503*/
 {
 if ( a2 ) /*0x4508*/
 Status |= 0x80000u; /*0x450a*/
 else Status &= ~0x80000u; /*0x4512*/
 return RtkUsbUndiControlTransferUsb3(a1, 4u, 59480, 15, 1u, &Status, 2); /*0x4546*/
 }
 }
 return Result; /*0x4551*/
}

// RtkUsbUndiClearStatus @ 0x4558 __int64 RtkUsbUndiClearStatus(__int64 n0x8000)
{
 __int64 Result; // rdi int v4; // [rsp+50h] [rbp+8h] BYREF Result = 0; /*0x4568*/
 if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x456f*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59408, 0, 1u, &v4, 2); /*0x459d*/
 if ( Result >= 0 ) /*0x45a3*/
 {
 v4 &= 0xF3FFFFFF; /*0x45a5*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59408, 15, 1u, &v4, 2); /*0x45db*/
 if ( Result >= 0 ) /*0x45e1*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x45ea*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x45f1*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x4605*/
 }
 }
 }
 return Result; /*0x4613*/
}

// RtkUsbUndiHwInit @ 0x461c __int64 RtkUsbUndiHwInit(__int64 n0x8000)
{
 __int64 result; // rax int n11; // ecx int v4; // esi int Result; // [rsp+70h] [rbp+30h] BYREF int Result; // [rsp+78h] [rbp+38h] BYREF result = 0; /*0x462f*/
 n11 = *(_DWORD *)(n0x8000 + 5000); /*0x4634*/
 if ( n11 >= 2 ) /*0x4641*/
 {
 if ( n11 <= 4 ) /*0x464e*/
 {
 Result = 524290; /*0x4857*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49312, 5, 1u, &Result, 2); /*0x4863*/
 Result = 96; /*0x488f*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49316, 3, 1u, &Result, 2); /*0x4896*/
 if ( result >= 0 ) /*0x489e*/
 {
 Result = 160; /*0x48c1*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49320, 3, 1u, &Result, 2); /*0x48cd*/
 if ( result >= 0 ) /*0x48d5*/
 {
 Result = 4194312; /*0x48fb*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58904, 15, 1u, &Result, 2); /*0x4907*/
 if ( result >= 0 ) /*0x490f*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54280, 0, 0, &Result, 2); /*0x4939*/
 Result = Result & 0xFF00FFFF | 0x10000; /*0x495b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54280, 15, 0, &Result, 2); /*0x496c*/
 Result = 1024000384; /*0x498c*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x4998*/
 Result = 1; /*0x49ab*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54324, 15, 0, &Result, 2); /*0x49c4*/
 }
 }
 }
 }
 else if ( n11 <= 11 ) /*0x4657*/
 {
 Result = 33554469; /*0x467d*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49312, 15, 1u, &Result, 2); /*0x4689*/
 if ( result >= 0 ) /*0x4691*/
 {
 Result = 160; /*0x46b7*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49316, 3, 1u, &Result, 2); /*0x46c3*/
 if ( result >= 0 ) /*0x46cb*/
 {
 Result = 272; /*0x46ee*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49320, 3, 1u, &Result, 2); /*0x46fa*/
 if ( result >= 0 ) /*0x4702*/
 {
 Result = 16777224; /*0x4725*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58904, 15, 1u, &Result, 2); /*0x4731*/
 if ( result >= 0 ) /*0x4739*/
 {
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &Result, 2); /*0x4763*/
 if ( result >= 0 ) /*0x476b*/
 {
 Result = Result | 0x80; /*0x4786*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, &Result, 2); /*0x479a*/
 if ( result >= 0 ) /*0x47a2*/
 {
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &Result, 2); /*0x47ca*/
 if ( result >= 0 ) /*0x47d2*/
 {
 v4 = Result; /*0x47d8*/
 Result = Result & 0xFFFFFFFE; /*0x47f4*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &Result, 2); /*0x4805*/
 if ( result >= 0 ) /*0x480d*/
 {
 Result = v4 | 1; /*0x4829*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &Result, 2); /*0x4832*/
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 return result; /*0x49d1*/
}

// RtkUsbUndiSetStationAddress @ 0x49e0 __int64 RtkUsbUndiSetStationAddress(__int64 n0x8000)
{
 __int64 Result; // r8 int v3; // edi int n99745792; // [rsp+60h] [rbp+20h] BYREF int v6; // [rsp+68h] [rbp+28h] BYREF Result = 0; /*0x49fc*/
 if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x4a04*/
 {
 n99745792 = 99745792; /*0x4a2f*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49172, 15, 1u, &n99745792, 2); /*0x4a3b*/
 if ( Result >= 0 ) /*0x4a41*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &v6, 2); /*0x4a6f*/
 if ( Result >= 0 ) /*0x4a75*/
 {
 n99745792 = v6 | 0x80; /*0x4a90*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, &n99745792, 2); /*0x4aa4*/
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49332, 0, 1u, &v6, 2); /*0x4acf*/
 if ( Result >= 0 ) /*0x4ad5*/
 {
 v3 = v6; /*0x4ad7*/
 n99745792 = v6 & 0xFFFFFFFE; /*0x4af3*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &n99745792, 2); /*0x4b09*/
 if ( Result >= 0 ) /*0x4b0f*/
 {
 n99745792 = v3 | 1; /*0x4b36*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49332, 15, 1u, &n99745792, 2); /*0x4b3e*/
 }
 }
 }
 }
 }
 return Result; /*0x4b4e*/
}

// RtkUsbUndiPhyPatchLoad @ 0x4b58 __int64 RtkUsbUndiPhyPatchLoad(__int64 n0x8000)
{
 bool isChipVer8; // zf unsigned __int8 n0xC8; // di __int64 result; // rax unsigned __int16 Result; // dx __int16 regAddr; // r8 __int16 Result; // r9 int *p_phyRegValue; // rax int n16; // [rsp+80h] [rbp+40h] BYREF int phyRegValue; // [rsp+88h] [rbp+48h] BYREF isChipVer8 = *(_DWORD *)(n0x8000 + 5000) == 8; /*0x4b74*/
 phyRegValue = 0; /*0x4b8a*/
 n16 = 0; /*0x4b8e*/
 n0xC8 = 0; /*0x4b92*/
 if ( isChipVer8 ) /*0x4b9a*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &n16, 2); /*0x4bb9*/
 n16 &= ~0x40000000u; /*0x4bbe*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53192, 8, 0, &n16, 2); /*0x4be3*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49328, 0, 1u, &n16, 2); /*0x4c0c*/
 n16 &= ~2u; /*0x4c11*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49328, 1, 1u, &n16, 2); /*0x4c34*/
 }
 if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 2 ) /*0x4c4a*/
 {
 n16 = 16; /*0x4c69*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 3, 0, &n16, 2); /*0x4c75*/
 }
 if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 1 ) /*0x4c86*/
 {
 do /*0x4ce4*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58372, 0, 0, &n16, 2); /*0x4caa*/
 if ( (n16 & 1) == 0 ) /*0x4cb3*/
 break; /*0x4cb3*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x4cbc*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x4cc3*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x4cd7*/
 ++n0xC8; /*0x4cdd*/
 }
 while ( n0xC8 < 0xC8u ); /*0x4ce4*/
 }
 n16 = 0; /*0x4d06*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &n16, 2) >= 0 ) /*0x4d17*/
 {
 n16 = 0; /*0x4d38*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2) >= 0 ) /*0x4d49*/
 {
 n16 = 0; /*0x4d74*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &n16, 2) >= 0 ) /*0x4d80*/
 {
 n16 = 0; /*0x4da1*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &n16, 2) >= 0 ) /*0x4db2*/
 {
 n16 = 0; /*0x4dd3*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &n16, 2) >= 0 ) /*0x4de4*/
 {
 n16 = 0; /*0x4e05*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2) >= 0 ) /*0x4e16*/
 {
 n16 = 0; /*0x4e37*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &n16, 2) >= 0 ) /*0x4e48*/
 {
 n16 = 0; /*0x4e69*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &n16, 2) >= 0 ) /*0x4e7a*/
 {
 n16 = 0; /*0x4e9b*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &n16, 2) >= 0 ) /*0x4eac*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x4eb5*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x4ebc*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000); /*0x4ed0*/
 n16 = 0; /*0x4ef3*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &n16, 2); /*0x4efc*/
 }
 }
 }
 }
 }
 }
 }
 }
 }
 result = *(unsigned int *)(n0x8000 + 5000); /*0x4f01*/
 switch ( (_DWORD)result ) /*0x4f0a*/
 {
 case 7: /*0x4f0a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x15Cu, 63488, 255, 0, byte_C790, 2); /*0x4f34*/
 Result = 24; /*0x4f39*/
 regAddr = -988; /*0x4f3e*/
 Result = 60; /*0x4f44*/
 p_phyRegValue = (int *)p_n16; /*0x4f48*/
LABEL_37:
 result = RtkUsbUndiControlTransferUsb3(n0x8000, Result, regAddr, Result, 0, p_phyRegValue, 2); /*0x5179*/
 break; /*0x518b*/
 case 8: /*0x4f0a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x118u, 63488, 255, 0, byte_BEC0, 2); /*0x4f85*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x14u, 64548, 60, 0, byte_BEA0, 2); /*0x4fb2*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &phyRegValue, 2); /*0x4fd9*/
 if ( (phyRegValue & 0x1000000) != 0 ) /*0x5007*/
 {
 n16 = 5496; /*0x5009*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2); /*0x5010*/
 n16 = 255; /*0x5015*/
 }
 else
 {
 n16 = 0; /*0x501e*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n16, 2); /*0x5022*/
 n16 = 239; /*0x5027*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 3, 0, &n16, 2); /*0x504d*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &phyRegValue, 2); /*0x5076*/
 phyRegValue |= 0x40000000u; /*0x507b*/
 Result = 8; /*0x5080*/
 regAddr = -12344; /*0x5086*/
 p_phyRegValue = &phyRegValue; /*0x5089*/
LABEL_36:
 Result = 4; /*0x5176*/
 goto LABEL_37; /*0x5176*/
 case 9: /*0x4f0a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x8Cu, 63488, 255, 0, byte_C550, 2); /*0x50c3*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, byte_C3F8, 2); /*0x50f0*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &phyRegValue, 2); /*0x5117*/
 if ( (phyRegValue & 0x1000000) != 0 ) /*0x5145*/
 {
 n16 = 5854; /*0x5147*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2); /*0x514e*/
 n16 = 29; /*0x5153*/
 }
 else
 {
 n16 = 0; /*0x515c*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n16, 2); /*0x5160*/
 n16 = 28; /*0x5165*/
 }
 p_phyRegValue = &n16; /*0x516c*/
 regAddr = -968; /*0x5170*/
 Result = 3; /*0x5173*/
 goto LABEL_36; /*0x5173*/
 }
 *(_BYTE *)(n0x8000 + 4592) = 0; /*0x5190*/
 return result; /*0x519f*/
}

// RtkUsbUndiNicTypeInit @ 0x51b0 __int64 RtkUsbUndiNicTypeInit(__int64 n0x8000)
{
 int n11; // eax int n4; // eax __int16 regAddr; // di int n11_1; // ecx __int64 linkStatus; // rdi int n2; // ecx int n45056; // [rsp+70h] [rbp+30h] BYREF int n4095; // [rsp+78h] [rbp+38h] BYREF n11 = *(_DWORD *)(n0x8000 + 5000); /*0x51ca*/
 if ( n11 >= 7 ) /*0x51d6*/
 {
 if ( n11 <= 9 ) /*0x51db*/
 {
 RtkUsbUndiInitUsbPhy(n0x8000); /*0x51f9*/
 RtkUsbUndiInitReg8153(n0x8000); /*0x5201*/
 RtkUsbUndiPhyInit8153(n0x8000); /*0x5209*/
 RtkUsbUndiPhyProgramRegs(n0x8000); /*0x5211*/
 }
 else if ( n11 <= 11 ) /*0x51e0*/
 {
 RtkUsbUndiInitUsbPhy(n0x8000); /*0x51e2*/
 RtkUsbUndiInitReg8154(n0x8000); /*0x51ea*/
 RtkUsbUndiPhyInit8154(n0x8000); /*0x51f2*/
 }
 }
 RtkUsbUndiMiiConfig(n0x8000); /*0x5219*/
 n4 = *(_DWORD *)(n0x8000 + 5000); /*0x521e*/
 if ( n4 >= 2 ) /*0x5238*/
 {
 if ( n4 <= 4 ) /*0x5241*/
 {
 regAddr = -10240; /*0x528c*/
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &n45056, 2) < 0 ) /*0x52af*/
 goto LABEL_14; /*0x52af*/
 n45056 &= ~0x100u; /*0x52b1*/
 goto LABEL_13; /*0x52b1*/
 }
 if ( n4 <= 11 ) /*0x5246*/
 {
 regAddr = -10232; /*0x5255*/
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55304, 0, 0, &n45056, 2) >= 0 ) /*0x5278*/
 {
 n45056 = (unsigned __int16)n45056; /*0x527e*/
LABEL_13:
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, regAddr, 15, 0, &n45056, 2); /*0x52b6*/
 }
 }
 }
LABEL_14:
 n11_1 = *(_DWORD *)(n0x8000 + 5000); /*0x52da*/
 *(_BYTE *)(n0x8000 + 5387) = 0; /*0x52e0*/
 *(_BYTE *)(n0x8000 + 4506) = (unsigned int)(n11_1 - 5) <= 6; /*0x52f0*/
 if ( (unsigned int)(n11_1 - 2) <= 2 ) /*0x52fc*/
 *(_BYTE *)(n0x8000 + 5393) = 0; /*0x52fe*/
 *(_BYTE *)(n0x8000 + 5393) = 0; /*0x5308*/
 *(_BYTE *)(n0x8000 + 4590) = (unsigned int)(n11_1 - 2) <= 9; /*0x5315*/
 *(_BYTE *)(n0x8000 + 5424) = (unsigned int)(n11_1 - 2) <= 9; /*0x5324*/
 *(_BYTE *)(n0x8000 + 5425) = (unsigned int)(n11_1 - 5) <= 6; /*0x5333*/
 if ( n11_1 <= 0 ) /*0x533b*/
 goto LABEL_20; /*0x533b*/
 if ( n11_1 > 9 ) /*0x5340*/
 {
 if ( n11_1 <= 11 ) /*0x5345*/
 *(_BYTE *)(n0x8000 + 5446) = 0; /*0x5347*/
LABEL_20:
 *(_BYTE *)(n0x8000 + 5426) = 0; /*0x534e*/
 goto LABEL_21; /*0x534e*/
 }
 *(_BYTE *)(n0x8000 + 5426) = 1; /*0x5372*/
 *(_BYTE *)(n0x8000 + 5446) = 0; /*0x5379*/
LABEL_21:
 if ( n11_1 >= 5 ) /*0x535d*/
 {
 if ( n11_1 <= 9 ) /*0x5362*/
 {
 if ( *(_WORD *)(n0x8000 + 5004) == 4096 || *(_WORD *)(n0x8000 + 80) == 6127 ) /*0x5394*/
 {
 n45056 = 0; /*0x53b3*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53208, 0, 0, &n45056, 2); /*0x53bc*/
 *(_BYTE *)(n0x8000 + 5427) = (n45056 & 0xFF000000) != 0; /*0x53cf*/
 goto LABEL_30; /*0x53d5*/
 }
 }
 else if ( n11_1 <= 11 ) /*0x5367*/
 {
 *(_BYTE *)(n0x8000 + 5427) = 1; /*0x5369*/
 goto LABEL_30; /*0x5370*/
 }
 }
 *(_BYTE *)(n0x8000 + 5427) = 0; /*0x53d7*/
LABEL_30:
 if ( *(_BYTE *)(n0x8000 + 5393) ) /*0x53de*/
 linkStatus = 0; /*0x53e7*/
 else linkStatus = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&n45056, (unsigned int *)(n0x8000 + 212)); /*0x53ff*/
 *(_DWORD *)(n0x8000 + 4996) = 2 - ((_BYTE)n45056 != 0); /*0x540f*/
 RtkUsbUndiPhySetPower(n0x8000, 1); /*0x5417*/
 RtkUsbUndiMcastDisableAll(n0x8000); /*0x541f*/
 n2 = *(_DWORD *)(n0x8000 + 5000); /*0x5424*/
 if ( n2 < 2 ) /*0x5433*/
 goto LABEL_38; /*0x5433*/
 if ( n2 <= 4 ) /*0x543c*/
 goto LABEL_37; /*0x543c*/
 if ( n2 <= 11 ) /*0x5441*/
 {
 n45056 = 45056; /*0x5464*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n45056, 2); /*0x5470*/
 n45056 = 29360128; /*0x5498*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 48132, 12, 1u, &n45056, 2); /*0x549f*/
LABEL_37:
 n45056 = 40960; /*0x54a4*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n45056, 2); /*0x54cd*/
 n45056 = 4096; /*0x54ef*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46080, 3, 1u, &n45056, 2); /*0x54fb*/
 }
LABEL_38:
 RtkUsbUndiConfigurePhy(n0x8000); /*0x5500*/
 RtkUsbUndiHwConfigRegs(n0x8000); /*0x550b*/
 RtkUsbUndiPhySetPower(n0x8000, 0); /*0x5515*/
 if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x5526*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59424, 0, 1u, &n45056, 2); /*0x554e*/
 if ( (n45056 & 0x80000) != 0 ) /*0x555a*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &n45056, 2); /*0x5585*/
 n4095 = n45056 | 0x8000; /*0x559f*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &n4095, 2); /*0x55b6*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52220, 0, 0, &n45056, 2); /*0x55dd*/
 n4095 = 4095; /*0x5602*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52220, 3, 0, &n4095, 2); /*0x560e*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54312, 0, 0, &n45056, 2); /*0x5632*/
 n4095 = n45056 & 0xFFFF7FFF; /*0x5649*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54312, 15, 0, &n4095, 2); /*0x5663*/
 }
 }
 return linkStatus; /*0x5678*/
}

// RtkUsbUndiInitUsbPhy @ 0x5688 __int64 RtkUsbUndiInitUsbPhy(__int64 n0x8000)
{
 __int64 result; // rax int Result; // [rsp+58h] [rbp+10h] BYREF Result = 0; /*0x568e*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 54416, 63, 0, &Result, 2); /*0x56bc*/
 if ( result >= 0 ) /*0x56c4*/
 {
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 6u, 54420, 3, 0, &Result, 2); /*0x56f3*/
 if ( result >= 0 ) /*0x56fb*/
 {
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46176, 0, 0, &Result, 2); /*0x5724*/
 if ( result >= 0 ) /*0x572c*/
 {
 Result &= ~1u; /*0x572e*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46176, 1, 0, &Result, 2); /*0x575c*/
 }
 }
 }
 return result; /*0x5761*/
}

// RtkUsbUndiPhyInit8153 @ 0x5768 __int64 RtkUsbUndiPhyInit8153(__int64 n0x8000)
{
 unsigned int chipVerOffset; // eax unsigned __int8 n0xC8; // di __int64 result; // rax int ctrlData; // [rsp+70h] [rbp+30h] BYREF chipVerOffset = *(_DWORD *)(n0x8000 + 5000) - 7; /*0x578c*/
 ctrlData = 0; /*0x578f*/
 n0xC8 = 0; /*0x5792*/
 if ( chipVerOffset <= 1 ) /*0x57a0*/
 {
 do /*0x5800*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58372, 0, 0, &ctrlData, 2); /*0x57ca*/
 if ( (ctrlData & 1) == 0 ) /*0x57d3*/
 break; /*0x57d3*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x57dc*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x57e1*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x57f3*/
 ++n0xC8; /*0x57f9*/
 }
 while ( n0xC8 < 0xC8u ); /*0x5800*/
 }
 ctrlData = 0; /*0x5824*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 1u, &ctrlData, 2); /*0x582c*/
 if ( result >= 0 ) /*0x5834*/
 {
 ctrlData = 0; /*0x5857*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &ctrlData, 2); /*0x585f*/
 if ( result >= 0 ) /*0x5867*/
 {
 ctrlData = 0; /*0x5893*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 1u, &ctrlData, 2); /*0x5896*/
 if ( result >= 0 ) /*0x589e*/
 {
 ctrlData = 0; /*0x58c5*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 1u, &ctrlData, 2); /*0x58cd*/
 if ( result >= 0 ) /*0x58d5*/
 {
 ctrlData = 0; /*0x58f8*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 1u, &ctrlData, 2); /*0x5900*/
 if ( result >= 0 ) /*0x5908*/
 {
 ctrlData = 0; /*0x592b*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 1u, &ctrlData, 2); /*0x5933*/
 if ( result >= 0 ) /*0x593b*/
 {
 ctrlData = 0; /*0x595e*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 1u, &ctrlData, 2); /*0x5966*/
 if ( result >= 0 ) /*0x596e*/
 {
 ctrlData = 0; /*0x5991*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 1u, &ctrlData, 2); /*0x5999*/
 if ( result >= 0 ) /*0x59a1*/
 {
 ctrlData = 0; /*0x59c4*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 1u, &ctrlData, 2); /*0x59cc*/
 if ( result >= 0 ) /*0x59d4*/
 {
 ctrlData = 0; /*0x59f7*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 1u, &ctrlData, 2); /*0x59ff*/
 if ( result >= 0 ) /*0x5a07*/
 {
 ctrlData = 0; /*0x5a2a*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &ctrlData, 2); /*0x5a32*/
 if ( result >= 0 ) /*0x5a3a*/
 {
 ctrlData = 0; /*0x5a5d*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &ctrlData, 2); /*0x5a65*/
 if ( result >= 0 ) /*0x5a6d*/
 {
 ctrlData = 0; /*0x5a90*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &ctrlData, 2); /*0x5a98*/
 if ( result >= 0 ) /*0x5aa0*/
 {
 ctrlData = 0; /*0x5ac3*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &ctrlData, 2); /*0x5acb*/
 if ( result >= 0 ) /*0x5ad3*/
 {
 ctrlData = 0; /*0x5af6*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &ctrlData, 2); /*0x5afe*/
 if ( result >= 0 ) /*0x5b06*/
 {
 ctrlData = 0; /*0x5b29*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &ctrlData, 2); /*0x5b31*/
 if ( result >= 0 ) /*0x5b39*/
 {
 ctrlData = 0; /*0x5b5f*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &ctrlData, 2); /*0x5b67*/
 if ( result >= 0 ) /*0x5b6f*/
 {
 ctrlData = 0; /*0x5b8f*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &ctrlData, 2); /*0x5b97*/
 if ( result >= 0 ) /*0x5b9f*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x5bac*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x5bb3*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))( /*0x5bc7*/
 *(_QWORD *)(n0x8000 + 4864),
 3000);
 ctrlData = 0; /*0x5bed*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 1u, &ctrlData, 2); /*0x5bf5*/
 if ( result >= 0 ) /*0x5bfd*/
 {
 ctrlData = 0; /*0x5c19*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &ctrlData, 2); /*0x5c21*/
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 }
 return result; /*0x5c33*/
}

// RtkUsbUndiPhyInit8154 @ 0x5c40 __int64 RtkUsbUndiPhyInit8154(__int64 n0x8000)
{
 __int64 result; // rax int ctrlData; // [rsp+78h] [rbp+38h] BYREF ctrlData = 0; /*0x5c82*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 1u, &ctrlData, 2); /*0x5c85*/
 if ( result >= 0 ) /*0x5c8d*/
 {
 ctrlData = 0; /*0x5cb0*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64584, 1, 0, &ctrlData, 2); /*0x5cb8*/
 if ( result >= 0 ) /*0x5cc0*/
 {
 ctrlData = 0; /*0x5ce6*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 1u, &ctrlData, 2); /*0x5cee*/
 if ( result >= 0 ) /*0x5cf6*/
 {
 ctrlData = 0; /*0x5d1c*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 1u, &ctrlData, 2); /*0x5d24*/
 if ( result >= 0 ) /*0x5d2c*/
 {
 ctrlData = 0; /*0x5d4e*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 1u, &ctrlData, 2); /*0x5d56*/
 if ( result >= 0 ) /*0x5d5e*/
 {
 ... [11790 chars total]

// RtkUsbUndiInitPhyProgram @ 0x6214 char RtkUsbUndiInitPhyProgram(__int64 n0x8000)
{
 int chipVersion; // ecx char result; // al _BYTE *phyDataPtr; // rax int n204800384_1; // eax int Result; // [rsp+80h] [rbp+40h] BYREF int n204800384_2; // [rsp+88h] [rbp+48h] BYREF n204800384_2 = 0; /*0x6258*/
 Result = 0; /*0x625b*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 1, 0, &Result, 2) >= 0 ) /*0x6273*/
 {
 Result = 0; /*0x6294*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &Result, 2) >= 0 ) /*0x62a4*/
 {
 Result = 0; /*0x62c5*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 12, 0, &Result, 2) >= 0 ) /*0x62d5*/
 {
 Result = 0; /*0x62f6*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 3, 0, &Result, 2) >= 0 ) /*0x6306*/
 {
 Result = 0; /*0x6327*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64556, 12, 0, &Result, 2) >= 0 ) /*0x6337*/
 {
 Result = 0; /*0x6358*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &Result, 2) >= 0 ) /*0x6368*/
 {
 Result = 0; /*0x6389*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 12, 0, &Result, 2) >= 0 ) /*0x6399*/
 {
 Result = 0; /*0x63ba*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 3, 0, &Result, 2) >= 0 ) /*0x63ca*/
 {
 Result = 0; /*0x63e7*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64564, 12, 0, &Result, 2) >= 0 ) /*0x63f7*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x6400*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(3000); /*0x6407*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000); /*0x641b*/
 Result = 0; /*0x643b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64548, 12, 0, &Result, 2); /*0x6443*/
 }
 }
 }
 }
 }
 }
 }
 }
 }
 chipVersion = *(_DWORD *)(n0x8000 + 5000); /*0x6448*/
 result = chipVersion - 7; /*0x644e*/
 if ( (unsigned int)(chipVersion - 7) <= 2 ) /*0x6454*/
 {
 switch ( chipVersion ) /*0x645d*/
 {
 case 7: /*0x645d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x120u, 63488, 255, 0, byte_C910, 2); /*0x6487*/
 phyDataPtr = &unk_CA30; /*0x648c*/
 break;
 case 8: /*0x645d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x188u, 63488, 63, 0, byte_C600, 2); /*0x64c5*/
 phyDataPtr = &unk_C3E0; /*0x64ca*/
 break;
 case 9: /*0x645d*/
 Result = 0; /*0x64f9*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Result, 2); /*0x6501*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x120u, 63488, 63, 0, byte_C410, 2); /*0x6530*/
 phyDataPtr = &unk_CE50; /*0x6535*/
 break;
 default:
 goto LABEL_22; /*0x64d6*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, phyDataPtr, 2); /*0x655b*/
LABEL_22:
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54276, 0, 0, &n204800384_2, 2); /*0x6560*/
 Result = n204800384_2 & 0xFF7FFFFF; /*0x659e*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54276, 15, 0, &Result, 2); /*0x65b8*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x65df*/
 Result = (unsigned __int16)n204800384_2; /*0x65e8*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 12, 0, &Result, 2); /*0x6610*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52220, 0, 0, &n204800384_2, 2); /*0x6639*/
 Result = (unsigned __int16)n204800384_2; /*0x6647*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52220, 15, 0, &Result, 2); /*0x6664*/
 result = *(_BYTE *)(n0x8000 + 5446); /*0x6669*/
 if ( result ) /*0x6671*/
 {
 if ( result != 1 ) /*0x67e5*/
 {
LABEL_27:
 *(_BYTE *)(n0x8000 + 4592) = 1; /*0x69a4*/
 return result; /*0x69a4*/
 }
 Result = 204800384; /*0x6808*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x6814*/
 Result = 511923571; /*0x6836*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x6842*/
 Result = 6272; /*0x6869*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x6870*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52184, 0, 0, &n204800384_2, 2); /*0x6899*/
 Result = (unsigned __int16)n204800384_2 | 0x20000; /*0x68b1*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52184, 15, 0, &Result, 2); /*0x68c8*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x68ec*/
 Result = n204800384_2 & 0xFFFF0000; /*0x6904*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 15, 0, &Result, 2); /*0x691b*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58420, 0, 0, &Result, 2); /*0x6944*/
 n204800384_1 = (unsigned __int16)Result | 0x4B0000; /*0x694d*/
 }
 else
 {
 Result = -64384; /*0x6694*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x66a0*/
 Result = 511967231; /*0x66c2*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x66ce*/
 Result = 12544; /*0x66f5*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x66fc*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52184, 0, 0, &n204800384_2, 2); /*0x6725*/
 Result = (unsigned __int16)n204800384_2 | 0x80000; /*0x673d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52184, 15, 0, &Result, 2); /*0x6754*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 52188, 0, 0, &n204800384_2, 2); /*0x6778*/
 Result = n204800384_2 & 0xFFFF0000; /*0x6790*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52188, 15, 0, &Result, 2); /*0x67a7*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58420, 0, 0, &Result, 2); /*0x67d0*/
 n204800384_1 = (unsigned __int16)Result | 0x7D0000; /*0x67d9*/
 }
 Result = n204800384_1; /*0x6952*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 15, 0, &Result, 2); /*0x6974*/
 Result = 4915225; /*0x6993*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58420, 15, 0, &Result, 2); /*0x699f*/
 goto LABEL_27; /*0x699f*/
 }
 return result; /*0x69b3*/
}

// RtkUsbUndiPhyProgramRegs @ 0x69c4 void RtkUsbUndiPhyProgramRegs(__int64 n0x8000)
{
 int v2; // ecx int v3; // ecx int v4; // ecx __int16 n3; // r9 __int16 v6; // r8 int *p_n5854; // rax int n5854; // [rsp+60h] [rbp+20h] BYREF int v9; // [rsp+68h] [rbp+28h] BYREF v2 = *(_DWORD *)(n0x8000 + 5000); /*0x69dd*/
 v9 = 0; /*0x69e6*/
 v3 = v2 - 7; /*0x69ea*/
 if ( v3 ) /*0x69ed*/
 {
 v4 = v3 - 1; /*0x69f3*/
 if ( v4 ) /*0x69f5*/
 {
 if ( v4 != 1 ) /*0x69fd*/
 return; /*0x69fd*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x8Cu, 63488, 255, 0, byte_C550, 2); /*0x6a2b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, byte_C3F8, 2); /*0x6a55*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &v9, 2); /*0x6a7d*/
 if ( (v9 & 0x1000000) != 0 ) /*0x6aaa*/
 {
 n5854 = 5854; /*0x6aac*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n5854, 2); /*0x6ab3*/
 n5854 = 29; /*0x6ab8*/
 }
 else
 {
 n5854 = 0; /*0x6ae4*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64552, 3, 0, &n5854, 2); /*0x6ae8*/
 n5854 = 28; /*0x6aed*/
 }
 n3 = 3; /*0x6abf*/
 v6 = -968; /*0x6ac5*/
 p_n5854 = &n5854; /*0x6acb*/
 }
 else
 {
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x118u, 63488, 255, 0, byte_BEC0, 2); /*0x6b22*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x14u, 64548, 60, 0, byte_BEA0, 2); /*0x6b4c*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53228, 0, 0, &v9, 2); /*0x6b74*/
 if ( (v9 & 0x1000000) != 0 ) /*0x6ba1*/
 {
 n5854 = 5496; /*0x6ba3*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n5854, 2); /*0x6baa*/
 n5854 = 255; /*0x6baf*/
 }
 else
 {
 n5854 = 0; /*0x6bb8*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64560, 3, 0, &n5854, 2); /*0x6bbc*/
 n5854 = 239; /*0x6bc1*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 64568, 3, 0, &n5854, 2); /*0x6beb*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x400u, 63488, 63, 1u, byte_BFE0, 2); /*0x6c19*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 1u, byte_C530, 2); /*0x6c45*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &v9, 2); /*0x6c6a*/
 v9 |= 0x40000000u; /*0x6c6f*/
 n3 = 8; /*0x6c74*/
 v6 = -12344; /*0x6c7a*/
 p_n5854 = &v9; /*0x6c80*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, v6, n3, 0, p_n5854, 2); /*0x6adf*/
 }
 else
 {
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x15Cu, 63488, 255, 0, byte_C790, 2); /*0x6cb5*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 0, p_n16, 2); /*0x6cdf*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54156, 0, 0, &v9, 2); /*0x6d07*/
 if ( (v9 & 0x10000) != 0 ) /*0x6d13*/
 {
 n5854 = 8519810; /*0x6d31*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54156, 15, 0, &n5854, 2); /*0x6d3d*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x400u, 63488, 63, 1u, byte_CA50, 2); /*0x6d6b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 0x18u, 64548, 60, 1u, byte_C8F0, 2); /*0x6d97*/
 }
}

// RtkUsbUndiHwConfigRegs @ 0x6db0 __int64 RtkUsbUndiHwConfigRegs(__int64 n0x8000)
{
 __int64 Result; // rax unsigned __int8 n0x14; // di __int16 n3; // r9 __int16 v5; // r8 unsigned int n0x2000; // [rsp+70h] [rbp+30h] BYREF int v7; // [rsp+78h] [rbp+38h] BYREF Result = *(unsigned int *)(n0x8000 + 5000); /*0x6dc3*/
 n0x14 = 0; /*0x6dcf*/
 if ( (int)Result >= 2 ) /*0x6dd8*/
 {
 if ( (int)Result <= 4 ) /*0x6de5*/
 {
 n0x2000 = 0x2000; /*0x7084*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x7090*/
 n0x2000 = 784; /*0x70b2*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45072, 3, 1u, &n0x2000, 2); /*0x70be*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x70e5*/
 n0x2000 = v7 & 0xFFFFFFFC; /*0x70f8*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x7118*/
 n0x2000 = 0x2000; /*0x713a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x7146*/
 n0x2000 = 49279; /*0x716d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45184, 3, 1u, &n0x2000, 2); /*0x7174*/
 n0x2000 = 1882193920; /*0x7197*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 45200, 12, 1u, &n0x2000, 2); /*0x71a3*/
 n0x2000 = 65510; /*0x71a8*/
 n3 = 3; /*0x71af*/
 v5 = -20332; /*0x71b2*/
 }
 else
 {
 if ( (int)Result <= 9 ) /*0x6dee*/
 {
 n0x2000 = 40960; /*0x6f38*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x6f44*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &v7, 2); /*0x6f6b*/
 n0x2000 = v7 & 0xFFFFFFFB; /*0x6f84*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 3, 1u, &n0x2000, 2); /*0x6f9b*/
 do /*0x6fff*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57344, 0, 1u, &n0x2000, 2); /*0x6fc2*/
 if ( (n0x2000 & 0x100) != 0 ) /*0x6fce*/
 break; /*0x6fce*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x6fd7*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x6fde*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x6ff2*/
 ++n0x14; /*0x6ff8*/
 }
 while ( n0x14 < 0x14u ); /*0x6fff*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x7023*/
 n0x2000 = v7 & 0xFFFFFFFC; /*0x703e*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x7058*/
 }
 else
 {
 if ( (int)Result > 11 ) /*0x6df7*/
 return Result; /*0x6df7*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57408, 0, 1u, &v7, 2); /*0x6e1c*/
 n0x2000 = v7 & 0xFFFFFFFC; /*0x6e30*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57408, 15, 1u, &n0x2000, 2); /*0x6e50*/
 }
 n0x2000 = 40960; /*0x6e78*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n0x2000, 2); /*0x6e7f*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &v7, 2); /*0x6ea6*/
 n0x2000 = v7 & 0xFFEFFFFF; /*0x6ec0*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 15, 1u, &n0x2000, 2); /*0x6ed7*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46544, 0, 1u, &v7, 2); /*0x6f00*/
 n3 = 15; /*0x6f0b*/
 v5 = -18992; /*0x6f0e*/
 n0x2000 = v7 & 0xFFFFFFF9; /*0x6f11*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, v5, n3, 1u, &n0x2000, 2); /*0x71d1*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57472, 0, 1u, &v7, 2); /*0x71fa*/
 n0x2000 = v7 & 0xFFFFFFFD; /*0x720d*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 57472, 15, 1u, &n0x2000, 2); /*0x7227*/
 }
 return Result; /*0x7234*/
}

// RtkUsbUndiMacInitLink @ 0x7240 __int64 RtkUsbUndiMacInitLink(__int64 n0x8000, __int64 padArg1, __int64 padArg2, int padArg3)
{
 __int64 result; // rax int v6; // r9d __int16 v7; // di unsigned __int16 Result; // si unsigned __int16 Result; // di bool v10; // zf unsigned int n0x1E0; // esi int v12; // eax unsigned __int16 Result; // r8 __int16 Result; // [rsp+48h] [rbp+10h] BYREF unsigned int Result; // [rsp+50h] [rbp+18h] BYREF Result = 0; /*0x7261*/
 LOWORD(Result) = 0; /*0x7265*/
 result = RtkUsbUndiPhyRead(n0x8000, 4u, &Result, padArg3); /*0x7269*/
 if ( result >= 0 )
 {
 v7 = Result & 0xF21F; /*0x728b*/
 result = RtkUsbUndiPhyRead(n0x8000, 9u, &Result, v6); /*0x728e*/
 if ( result >= 0 )
 {
 Result = Result & 0xFCFF; /*0x72a6*/
 if ( *(_BYTE *)(n0x8000 + 4590) ) /*0x72a9*/
 v7 |= 0xC00u; /*0x72b7*/
 Result = v7 | 0x1E0; /*0x72c0*/
 if ( *(_BYTE *)(n0x8000 + 5425) ) /*0x72c4*/
 Result |= 0x300u; /*0x72d2*/
 result = RtkUsbUndiPhyWrite(n0x8000, 4u, Result, 5); /*0x72e4*/
 if ( result >= 0 )
 {
 result = RtkUsbUndiPhyWrite(n0x8000, 9u, Result, 5); /*0x7301*/
 if ( result >= 0 )
 {
 if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x730f*/
 result = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&Result, (unsigned int *)(n0x8000 + 212)); /*0x7327*/
 if ( !(_BYTE)Result
 || (*(_BYTE *)(n0x8000 + 4506) != 1
 ? (v10 = *(_DWORD *)(n0x8000 + 212) == 4)
 : (v10 = *(_DWORD *)(n0x8000 + 212) == 6),
 !v10) )
 {
 if ( *(_BYTE *)(n0x8000 + 4462) == 1 )
 {
 result = RtkUsbUndiCheckMediaStatus(n0x8000); /*0x7362*/
 if ( (_DWORD)result == 1 )
 {
 n0x1E0 = 0; /*0x7370*/
 if ( *(_BYTE *)(n0x8000 + 5387) ) /*0x7372*/
 goto LABEL_23; /*0x7372*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x7389*/
 v12 = *(_DWORD *)(n0x8000 + 5000); /*0x738e*/
 if ( v12 == 1 || (Result = 4608, (unsigned int)(v12 - 5) <= 6) ) /*0x73a5*/
 Result = -28160; /*0x73a7*/
 result = RtkUsbUndiPhyWrite(n0x8000, 0, Result, 2); /*0x73b5*/
 *(_BYTE *)(n0x8000 + 5387) = 1; /*0x73ba*/
 if ( result >= 0 )
 {
LABEL_23:
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x73d2*/
 result = (*(__int64 ( **)(__int64))(n0x8000 + 4896))(50000); /*0x73d6*/
 else result = (*(__int64 ( **)(_QWORD, __int64))(n0x8000 + 4928))( /*0x73e8*/
 *(_QWORD *)(n0x8000 + 4864),
 50000);
 do
 {
 if ( !*(_BYTE *)(n0x8000 + 5393) ) /*0x73ee*/
 result = RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&Result, &Result); /*0x7404*/
 if ( (_BYTE)Result ) /*0x740e*/
 break; /*0x740e*/
 result = *(_BYTE *)(n0x8000 + 4498) == 48
 ? (*(__int64 ( **)(__int64))(n0x8000 + 4896))(50000)
 : (*(__int64 ( **)(_QWORD, __int64))(n0x8000 + 4928))(
 *(_QWORD *)(n0x8000 + 4864),
 50000);
 ++n0x1E0; /*0x7434*/
 }
 while ( n0x1E0 < 0x1E0 );
 }
 }
 }
 }
 }
 }
 }
 }
 return result; /*0x7445*/
}

// RtkUsbUndiCheckLedMode @ 0x7450 char RtkUsbUndiCheckLedMode(__int64 n0x8000)
{
 unsigned __int16 v2; // cx int v4; // [rsp+50h] [rbp+8h] BYREF if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 9 ) /*0x7465*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 50160, 15, 0, &v4, 2); /*0x748d*/
 if ( (v4 & 0xFFFF0000) == 0xD4500000 ) /*0x74a0*/
 {
 v2 = v4; /*0x74a2*/
 *(_BYTE *)(n0x8000 + 5428) = 1; /*0x74a6*/
 *(_QWORD *)(n0x8000 + 5432) = v2; /*0x74b2*/
 return 1; /*0x74b9*/
 }
 *(_QWORD *)(n0x8000 + 5432) = 0; /*0x74bb*/
 *(_BYTE *)(n0x8000 + 5428) = 0; /*0x74c3*/
 }
 return 0; /*0x74cc*/
}

// RtkUsbUndiInitLed @ 0x74d4 __int64 RtkUsbUndiInitLed(__int64 n0x8000)
{
 int n40960; // [rsp+58h] [rbp+10h] BYREF n40960 = 40960; /*0x74fe*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &n40960, 2); /*0x750b*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46128, 0, 1u, &n40960, 2); /*0x7537*/
 n40960 &= ~4u; /*0x753c*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46128, 3, 1u, &n40960, 2); /*0x756f*/
}

// RtkUsbUndiMiiConfig @ 0x7578 __int64 RtkUsbUndiMiiConfig(__int64 n0x8000)
{
 unsigned int n2250_1; // eax __int64 result; // rax unsigned int Status; // [rsp+60h] [rbp+20h] BYREF int v5; // [rsp+68h] [rbp+28h] BYREF if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 2) <= 7 ) /*0x75a6*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 56720, 0, 1u, &v5, 2); /*0x75c6*/
 Status = v5 & 0xF8FFFFFF; /*0x75db*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 56720, 15, 1u, &Status, 2); /*0x75f8*/
 }
 if ( (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 7) <= 1 ) /*0x760f*/
 {
 Status = 2250; /*0x7634*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Status, 2); /*0x7640*/
 Status = 41728; /*0x7661*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55332, 2, 0, &Status, 2); /*0x766d*/
 Status = 0; /*0x7672*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &Status, 2); /*0x7697*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54296, 0, 0, &v5, 2); /*0x76ba*/
 if ( (Status & 0x20) != 0 ) /*0x76d9*/
 n2250_1 = v5 | 0xC0000; /*0x76db*/
 else n2250_1 = v5 & 0xFFF7FFFF; /*0x76e2*/
 Status = n2250_1; /*0x76e6*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54296, 15, 0, &Status, 2); /*0x76f7*/
 Status = 2250; /*0x771b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54152, 3, 1u, &Status, 2); /*0x7727*/
 }
 result = (unsigned int)(*(_DWORD *)(n0x8000 + 5000) - 8); /*0x7732*/
 if ( (unsigned int)result <= 1 ) /*0x7738*/
 {
 Status = 54394880; /*0x7756*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54296, 12, 0, &Status, 2); /*0x7762*/
 }
 return result; /*0x7771*/
}

// RtkUsbUndiInitReg8153 @ 0x777c __int64 RtkUsbUndiInitReg8153(__int64 n0x8000)
{
 unsigned int i; // edi unsigned int j; // edi int n7; // eax __int64 result; // rax int Result; // [rsp+70h] [rbp+30h] BYREF Result = 0; /*0x77a8*/
 for ( i = 0; i <= 0x64; ++i ) /*0x77ac*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57348, 0, 1u, &Result, 2) < 0 || (Result & 2) != 0 ) /*0x77df*/
 break; /*0x77df*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x77ea*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x77ef*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7801*/
 }
 Result = 40960; /*0x782c*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &Result, 2); /*0x7838*/
 for ( j = 0; j <= 0x64; ++j ) /*0x783d*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &Result, 2) < 0 /*0x787a*/
 || (((Result & 7) - 3) & 0xFFFFFFFD) == 0 )
 {
 break; /*0x787a*/
 }
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7885*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x788a*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x789c*/
 }
 n7 = *(_DWORD *)(n0x8000 + 5000); /*0x78a7*/
 if ( n7 == 7 ) /*0x78b0*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46120, 0, 0, &Result, 2); /*0x78da*/
 Result |= 0x12Cu; /*0x78df*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46120, 3, 0, &Result, 2); /*0x7908*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46108, 0, 0, &Result, 2); /*0x7931*/
 Result |= 0x30000u; /*0x7936*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46108, 12, 0, &Result, 2); /*0x7961*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46176, 0, 0, &Result, 2); /*0x798a*/
 Result &= ~1u; /*0x798f*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46176, 1, 0, &Result, 2); /*0x79b3*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x79dc*/
 Result |= 0x10000u; /*0x79e1*/
 }
 else
 {
 if ( (unsigned int)(n7 - 8) > 1 ) /*0x79f1*/
 goto LABEL_22; /*0x79f1*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7a1b*/
 Result |= 0x10000u; /*0x7a20*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46180, 12, 0, &Result, 2); /*0x7a49*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53184, 0, 0, &Result, 2); /*0x7a70*/
 if ( Result ) /*0x7a98*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7aa5*/
 Result |= 1u; /*0x7aaa*/
 }
 else
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46180, 0, 0, &Result, 2); /*0x7a9a*/
 Result &= ~1u; /*0x7a9f*/
 }
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46180, 12, 0, &Result, 2); /*0x7acd*/
LABEL_22:
 Result = 1; /*0x7ad2*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 52216, 3, 0, &Result, 2); /*0x7afe*/
 if ( *(_DWORD *)(n0x8000 + 5000) == 8 ) /*0x7b0a*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49328, 0, 1u, &Result, 2); /*0x7b34*/
 Result &= ~2u; /*0x7b39*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49328, 1, 1u, &Result, 2); /*0x7b5f*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53192, 0, 0, &Result, 2); /*0x7b88*/
 Result &= ~0x40000000u; /*0x7b8d*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53192, 8, 0, &Result, 2); /*0x7bb4*/
 }
 return result; /*0x7bc6*/
}

// RtkUsbUndiInitReg8154 @ 0x7bd4 __int64 RtkUsbUndiInitReg8154(__int64 n0x8000)
{
 unsigned int i; // edi unsigned int j; // edi int Status; // [rsp+78h] [rbp+38h] BYREF unsigned int v6; // [rsp+80h] [rbp+40h] BYREF Status = 0; /*0x7c00*/
 for ( i = 0; i <= 0x64; ++i ) /*0x7c03*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 57348, 0, 1u, &Status, 2) < 0 || (Status & 2) != 0 ) /*0x7c35*/
 break; /*0x7c35*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7c40*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x7c45*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7c57*/
 }
 Status = 40960; /*0x7c82*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 3, 1u, &Status, 2); /*0x7c8e*/
 for ( j = 0; j <= 0x64; ++j ) /*0x7c93*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &Status, 2) < 0 /*0x7ccf*/
 || (((Status & 7) - 3) & 0xFFFFFFFD) == 0 )
 {
 break; /*0x7ccf*/
 }
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x7cda*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x7cdf*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x7cf1*/
 }
 Status = 0; /*0x7d1c*/
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55304, 0, 0, &Status, 2) >= 0 ) /*0x7d31*/
 {
 v6 = Status & 0xFFEFFFFF; /*0x7d4d*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55304, 15, 0, &v6, 2) >= 0 /*0x7d9c*/
 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 53244, 12, 0, &Status, 2) >= 0 )
 {
 v6 = Status & 0xFEFFFFFF; /*0x7db7*/
 if ( RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53244, 12, 0, &v6, 2) >= 0 /*0x7e02*/
 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55320, 0, 0, &Status, 2) >= 0 )
 {
 v6 = Status & 0xFFFEFFFF; /*0x7e1a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 55320, 15, 0, &v6, 2); /*0x7e2e*/
 }
 }
 }
 Status = 0; /*0x7e50*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 55296, 0, 0, &Status, 2); /*0x7e58*/
 Status = 32768000; /*0x7e83*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54488, 12, 0, &Status, 2); /*0x7e9c*/
}

// RtkUsbUndiOcpInit @ 0x7ea8 __int64 RtkUsbUndiOcpInit(__int64 n0x8000)
{
 __int64 Result; // rax int Status; // [rsp+60h] [rbp+20h] BYREF int v4; // [rsp+68h] [rbp+28h] BYREF Result = *(unsigned int *)(n0x8000 + 5000); /*0x7eb7*/
 v4 = 0; /*0x7ebd*/
 if ( (int)Result >= 7 ) /*0x7ec7*/
 {
 if ( (int)Result <= 9 ) /*0x7ed0*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49340, 0, 1u, &v4, 2); /*0x8012*/
 Status = v4 & 0x7F00; /*0x802d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49340, 3, 1u, &Status, 2); /*0x8043*/
 Status = 16; /*0x8069*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58408, 3, 1u, &Status, 2); /*0x8070*/
 Status = 0; /*0x8075*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53992, 3, 1u, &Status, 2); /*0x809a*/
LABEL_11:
 Status = 0; /*0x809f*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53964, 15, 1u, &Status, 2); /*0x80c6*/
 }
 if ( (int)Result <= 11 ) /*0x7ed9*/
 {
 Status = 255; /*0x7f05*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49340, 3, 1u, &Status, 2); /*0x7f0c*/
 if ( Result >= 0 ) /*0x7f14*/
 {
 Status = 16; /*0x7f36*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58408, 3, 1u, &Status, 2); /*0x7f42*/
 if ( Result >= 0 ) /*0x7f4a*/
 {
 Result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 49348, 0, 1u, &v4, 2); /*0x7f70*/
 if ( Result >= 0 ) /*0x7f78*/
 {
 Status = v4 & 0xFFFFFFCE; /*0x7f94*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 49348, 15, 1u, &Status, 2); /*0x7fa8*/
 if ( Result >= 0 ) /*0x7fb0*/
 {
 Status = 0; /*0x7fb6*/
 Result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 53992, 3, 1u, &Status, 2); /*0x7fdb*/
 if ( Result >= 0 ) /*0x7fe3*/
 goto LABEL_11; /*0x7fe3*/
 }
 }
 }
 }
 }
 }
 return Result; /*0x80d0*/
}

// RtkUsbUndiSetSpeed @ 0x80d8 __int64 RtkUsbUndiSetSpeed(__int64 n0x8000)
{
 int Result; // eax __int64 result; // rax int Result; // [rsp+60h] [rbp+20h] BYREF int Result; // [rsp+68h] [rbp+28h] BYREF Result = *(_DWORD *)(n0x8000 + 5000); /*0x80ef*/
 Result = 0; /*0x80f5*/
 result = (unsigned int)(Result - 10); /*0x80fc*/
 if ( (unsigned int)result <= 1 ) /*0x8102*/
 {
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &Result, 2); /*0x812e*/
 if ( result >= 0 ) /*0x8136*/
 {
 Result = Result & 0xFFFFFFFC; /*0x8151*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &Result, 2); /*0x8165*/
 if ( result >= 0 ) /*0x816d*/
 {
 result = RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &Result, 2); /*0x8192*/
 if ( result >= 0 ) /*0x819a*/
 {
 Result = Result | 3; /*0x81b5*/
 result = RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 3, 0, &Result, 2); /*0x81c9*/
 if ( result >= 0 ) /*0x81d1*/
 {
 Result = -65152; /*0x81f8*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54284, 15, 0, &Result, 2); /*0x8204*/
 Result = 37617663; /*0x822b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54316, 15, 0, &Result, 2); /*0x8232*/
 Result = 122880000; /*0x8254*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54320, 15, 0, &Result, 2); /*0x8260*/
 Result = 50331648; /*0x8288*/
 return RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54324, 8, 0, &Result, 2); /*0x828f*/
 }
 }
 }
 }
 }
 return result; /*0x829e*/
}

// RtkUsbUndiGetMacFromAcpi @ 0x82a8 char RtkUsbUndiGetMacFromAcpi(__int64 n0x8000, __int64 a2, __int64 a3, double a4)
{
 char Ptr; // dl unsigned __int64 v6; // r11 char Ptr; // di unsigned __int64 Index; // r10 __int64 v9; // rbx __int64 v10; // r8 unsigned __int64 i; // r9 __int64 Ptr; // rax __int64 n4; // r10 unsigned __int64 v14; // r8 int v15; // ecx __int64 n4_1; // r11 unsigned __int8 *v17; // r9 int v18; // eax int v19; // eax int v20; // eax __int64 v21; // r9 unsigned int v22; // r8d unsigned __int8 *v23; // r9 int v24; // ecx __int64 n4_2; // r11 int v26; // eax int v27; // eax unsigned __int64 v28; // r9 __int64 Index; // r8 unsigned __int8 *v30; // r9 int v31; // ecx __int64 n4_3; // r11 int v33; // eax int v34; // eax unsigned __int8 *v35; // r9 int v36; // ecx int v37; // eax int v38; // eax unsigned int Index; // eax char *v41; // r9 char *v42; // r8 __int64 n6; // r10 char v44; // cl char v45; // cl char v46; // cl _DWORD v47[4]; // [rsp+20h] [rbp-10h] BYREF char v48; // [rsp+48h] [rbp+18h] BYREF Ptr = 0; /*0x82c6*/
 v6 = *(_QWORD *)(qword_E2F0 + 104); /*0x82cb*/
 v47[0] = -2006390671; /*0x82cf*/
 v47[1] = 299099377; /*0x82d6*/
 v47[2] = -2147474756; /*0x82dd*/
 v47[3] = -2121777977; /*0x82e4*/
 Ptr = 0; /*0x82eb*/
 Index = 0; /*0x82ee*/
 if ( !v6 ) /*0x82f4*/
 return 0; /*0x82f4*/
 v9 = *(_QWORD *)(qword_E2F0 + 112); /*0x82fa*/
 v10 = v9 - (_QWORD)v47; /*0x8305*/
LABEL_3:
 for ( i = 0; i < 0x10; ++i ) /*0x8308*/
 {
 if ( *((_BYTE *)v47 + i) != *((_BYTE *)v47 + i + v10) ) /*0x8318*/
 {
 ++Index; /*0x842e*/
 v10 += 24; /*0x8431*/
 if ( Index >= v6 ) /*0x8438*/
 return 0; /*0x8438*/
 goto LABEL_3; /*0x8438*/
 }
 }
 Ptr = 3 *Index; /*0x8327*/
 n4 = 4; /*0x832b*/
 LODWORD(v14) = 0; /*0x8331*/
 v15 = 0; /*0x8339*/
 n4_1 = 4; /*0x833b*/
 v17 = (unsigned __int8 *)(*(_QWORD *)(v9 + 8 *Ptr + 16) + 16LL); /*0x833e*/
 do /*0x8354*/
 {
 v18 = *v17++; /*0x8342*/
 v19 = v18 << v15; /*0x8349*/
 v15 += 8; /*0x834b*/
 v14 = (unsigned int)(v19 + v14); /*0x834e*/
 --n4_1; /*0x8351*/
 }
 while ( n4_1 ); /*0x8354*/
 v20 = *(_DWORD *)v14; /*0x8356*/
 *(_DWORD *)&word_4 = v14; /*0x8359*/
 v21 = (unsigned int)v14; /*0x8361*/
 if ( v20 != dword_D49C ) /*0x836a*/
 return 0; /*0x836a*/
 v22 = 0; /*0x8370*/
 v23 = (unsigned __int8 *)(v21 + 36); /*0x8373*/
 v24 = 0; /*0x8377*/
 n4_2 = 4; /*0x8379*/
 do /*0x838e*/
 {
 v26 = *v23++; /*0x837c*/
 v27 = v26 << v24; /*0x8383*/
 v24 += 8; /*0x8385*/
 v22 += v27; /*0x8388*/
 --n4_2; /*0x838b*/
 }
 while ( n4_2 ); /*0x838e*/
 v28 = v22; /*0x8390*/
 *(_DWORD *)&word_4 = v22; /*0x8393*/
 LODWORD(Index) = 0; /*0x839b*/
 if ( *(_DWORD *)v28 != dword_D4A4 ) /*0x83a7*/
 return 0; /*0x83a7*/
 v30 = (unsigned __int8 *)(v28 + 40); /*0x83a9*/
 v31 = 0; /*0x83ad*/
 n4_3 = 4; /*0x83af*/
 do /*0x83c4*/
 {
 v33 = *v30++; /*0x83b2*/
 v34 = v33 << v31; /*0x83b9*/
 v31 += 8; /*0x83bb*/
 Index = (unsigned int)(v34 + Index); /*0x83be*/
 --n4_3; /*0x83c1*/
 }
 while ( n4_3 ); /*0x83c4*/
 *(_DWORD *)&word_4 = Index; /*0x83c6*/
 *(_DWORD *)&_ImageBase = 0; /*0x83ce*/
 v35 = (unsigned __int8 *)(Index + 4); /*0x83d0*/
 v36 = 0; /*0x83d4*/
 do /*0x83e7*/
 {
 v37 = *v35++; /*0x83d6*/
 v38 = v37 << v36; /*0x83dd*/
 v36 += 8; /*0x83df*/
 *(_DWORD *)&_ImageBase += v38; /*0x83e2*/
 --n4; /*0x83e4*/
 }
 while ( n4 ); /*0x83e7*/
 if ( *(_DWORD *)Index != dword_D4AC ) /*0x83f2*/
 return 0; /*0x8417*/
 Index = 0; /*0x8401*/
 while ( *(_QWORD *)Index != qword_D4B8 || *(_BYTE *)(Index + 8) != byte_D4C0 ) /*0x840c*/
 {
 ++Index; /*0x840e*/
 ++Index; /*0x8410*/
 if ( Index > *(_DWORD *)&_ImageBase ) /*0x8415*/
 return 0; /*0x8415*/
 }
 v41 = &v48; /*0x843f*/
 v42 = (char *)(Index + 10); /*0x8443*/
 n6 = 6; /*0x8447*/
 while ( 2 ) /*0x8452*/
 {
 v44 = *(v42 - 1); /*0x8452*/
 if ( (unsigned __int8)(v44 - 48) > 9u ) /*0x845d*/
 {
 if ( (unsigned __int8)(v44 - 65) > 5u ) /*0x846c*/
 {
 if ( (unsigned __int8)(v44 - 97) <= 5u ) /*0x8478*/
 Ptr = v44 - 87; /*0x847a*/
 }
 else
 {
 Ptr = v44 - 55; /*0x846e*/
 }
 }
 else
 {
 Ptr = v44 - 48; /*0x8462*/
 }
 v45 = *v42; /*0x847d*/
 if ( (unsigned __int8)(*v42 - 48) <= 9u ) /*0x8487*/
 {
 v46 = v45 - 48; /*0x8489*/
 goto LABEL_37; /*0x848c*/
 }
 if ( (unsigned __int8)(v45 - 65) <= 5u ) /*0x8493*/
 {
 v46 = v45 - 55; /*0x8495*/
 goto LABEL_37; /*0x8498*/
 }
 if ( (unsigned __int8)(v45 - 97) <= 5u ) /*0x849f*/
 {
 v46 = v45 - 87; /*0x84a1*/
LABEL_37:
 Ptr = v46; /*0x84a4*/
 }
 v42 += 2; /*0x84a9*/
 *v41++ = Ptr | (16 *Ptr); /*0x84b2*/
 if ( --n6 ) /*0x84bb*/
 continue; /*0x84bb*/
 break;
 }
 RtkUsbUndiCopyMem((_BYTE *)(n0x8000 + 252), &v48, 32, a4); /*0x84cc*/
 return 1; /*0x8428*/
}

// RtkUsbUndiAlignRing @ 0x84d8 bool RtkUsbUndiAlignRing(__int64 n0x8000)
{
 int Result; // edi unsigned __int16 Size; // ax unsigned __int16 v4; // cx __int64 v5; // rdx Result = 0; /*0x84ec*/
 do /*0x85a7*/
 {
 Size = RtkUsbUndiSetMaxPacketSize( /*0x851c*/
 n0x8000,
 (_WORD *)(*(_QWORD *)(n0x8000 + 112)
 + *(unsigned __int16 *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500))
 + (__int64)(*(unsigned __int16 *)(n0x8000 + 4472) * *(unsigned __int16 *)(n0x8000 + 4500))));
 if ( Size % (int)*(unsigned __int16 *)(n0x8000 + 5390) ) /*0x8534*/
 {
 *(_WORD *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) += Size /*0x8555*/
 + *(_WORD *)(n0x8000 + 5390)
 - Size
 % (int)*(unsigned __int16 *)(n0x8000 + 5390);
 v4 = *(_WORD *)(n0x8000 + 5390) - Size % (int)*(unsigned __int16 *)(n0x8000 + 5390); /*0x8564*/
 }
 else
 {
 *(_WORD *)(*(_QWORD *)(n0x8000 + 152) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) += Size; /*0x8577*/
 v4 = 0; /*0x857c*/
 }
 v5 = *(_QWORD *)(n0x8000 + 152); /*0x8587*/
 Result += Size + v4; /*0x8594*/
 }
 while ( *(_WORD *)(v5 + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)) < *(_WORD *)(*(_QWORD *)(n0x8000 + 144) /*0x85a7*/
 + 2LL
 * *(unsigned __int16 *)(n0x8000 + 4500)) );
 *(_WORD *)(v5 + 2LL * *(unsigned __int16 *)(n0x8000 + 4502)) = 0; /*0x85b4*/
 return Result == *(unsigned __int16 *)(*(_QWORD *)(n0x8000 + 144) + 2LL * *(unsigned __int16 *)(n0x8000 + 4500)); /*0x85d9*/
}

// RtkUsbUndiTxRxInit @ 0x85e0 __int64 RtkUsbUndiTxRxInit(__int64 n0x8000, unsigned __int64 n1000, __int64 a3, double a4)
{
 __int64 allocStatus; // rsi unsigned __int64 j; // rdi int n11; // eax unsigned int regVal; // eax int regVal_2; // eax unsigned int regVal_3; // eax __int64 paddingArg1; // rdx __int64 paddingArg2; // r8 __int64 paddingArg3; // r8 char *descSrc; // rcx __int64 n6; // r9 char *descDst; // r8 char descByte; // al unsigned __int64 k; // rax __int64 loopCount; // r15 __int16 Index; // ax __int16 n511_1; // cx __int64 zeroArg; // r8 __int64 retryCount; // rsi __int16 Table; // r14 __int16 n511_2; // ax __int16 n511_3; // cx bool isDescriptorReady; // zf __int64 i; // [rsp+40h] [rbp-49h] BYREF int n3000; // [rsp+48h] [rbp-41h]
 __int64 *p_i; // [rsp+50h] [rbp-39h] BYREF int n60; // [rsp+58h] [rbp-31h]
 __int16 unusedVar; // [rsp+5Ch] [rbp-2Dh]
 _QWORD gigaCfgBuf[8]; // [rsp+60h] [rbp-29h] BYREF unsigned int tempVal; // [rsp+A0h] [rbp+17h]
 unsigned int regVal_1; // [rsp+F0h] [rbp+67h] BYREF int phyRegTemp; // [rsp+F8h] [rbp+6Fh] BYREF allocStatus = 0; /*0x8605*/
 phyRegTemp = 0; /*0x8608*/
 *(_BYTE *)(n0x8000 + 5444) = 1; /*0x860c*/
 RtkUsbUndiMcastDisableAll(n0x8000); /*0x8613*/
 RtkUsbUndiPhySetPower(n0x8000, 1); /*0x861d*/
 if ( *(_DWORD *)(n0x8000 + 5000) != 1 ) /*0x8632*/
 {
 for ( j = 0; j <= 0x64; ++j ) /*0x8638*/
 {
 if ( RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 0, 1u, &regVal_1, 2) < 0 || (regVal_1 & 0x800) != 0 ) /*0x8677*/
 break; /*0x8677*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x8683*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x8688*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x869a*/
 }
 while ( j <= 0x64 /*0x86eb*/
 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 59468, 0, 1u, &regVal_1, 2) >= 0
 && ((regVal_1 & 0x20000000) == 0 || (regVal_1 & 0x10000000) == 0) )
 {
 ++j; /*0x86ed*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x86f7*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(10000); /*0x86fc*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 10000); /*0x870e*/
 }
 }
 RtkUsbUndiSetStationAddress(n0x8000); /*0x871f*/
 RtkUsbUndiClearStatus(n0x8000); /*0x8727*/
 RtkUsbUndiConfigurePhy(n0x8000); /*0x872f*/
 RtkUsbUndiPhySetPower(n0x8000, 0); /*0x8739*/
 RtkUsbUndiMcastEnableAll(n0x8000); /*0x8741*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &phyRegTemp, 2); /*0x876a*/
 regVal_1 = phyRegTemp & 0xFFFFFFFC; /*0x8780*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 15, 0, &regVal_1, 2); /*0x879a*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x87a6*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(5000); /*0x87ad*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 5000); /*0x87c1*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 54448, 0, 0, &phyRegTemp, 2); /*0x87e6*/
 regVal_1 = phyRegTemp | 3; /*0x87ff*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 54448, 15, 0, &regVal_1, 2); /*0x8816*/
 n11 = *(_DWORD *)(n0x8000 + 5000); /*0x881b*/
 if ( n11 >= 2 ) /*0x8824*/
 {
 if ( n11 <= 4 ) /*0x882d*/
 {
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 15, 1u, &regVal_1, 2); /*0x889b*/
 regVal_3 = regVal_1; /*0x88a0*/
 *(_DWORD *)(n0x8000 + 5440) = regVal_1; /*0x88a3*/
 regVal_2 = regVal_3 | 0x2C000; /*0x88a9*/
 }
 else
 {
 if ( n11 > 11 ) /*0x8832*/
 goto LABEL_25; /*0x8832*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 58896, 15, 1u, &regVal_1, 2); /*0x885f*/
 regVal = regVal_1; /*0x8864*/
 *(_DWORD *)(n0x8000 + 5440) = regVal_1; /*0x8867*/
 regVal_2 = regVal | 0x2D000; /*0x886d*/
 }
 regVal_1 = regVal_2; /*0x88ae*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, &regVal_1, 2); /*0x88d3*/
 }
LABEL_25:
 *(_BYTE *)(n0x8000 + 5444) = 1; /*0x88d8*/
 RtkUsbUndiPhyFullInit(n0x8000); /*0x88e2*/
 RtkUsbUndiWaitForNvram(n0x8000, paddingArg1, paddingArg2, a4); /*0x88ea*/
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x88fb*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(3000000); /*0x88ff*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000000); /*0x8911*/
 RtkUsbUndiZeroMem((__int64)::p_i, 0x5EAu, paddingArg3, a4); /*0x8926*/
 descSrc = (char *)(n0x8000 + 252); /*0x8938*/
 n6 = 6; /*0x893f*/
 descDst = (char *)&unk_E326 - n0x8000; /*0x8945*/
 do /*0x8961*/
 {
 ::p_i[(_QWORD)descSrc - n0x8000 - 252] = *descSrc; /*0x894a*/
 descByte = *descSrc++; /*0x8951*/
 descSrc[(_QWORD)descDst - 253] = descByte; /*0x8956*/
 --n6; /*0x895e*/
 }
 while ( n6 ); /*0x8961*/
 for ( k = 12; k < 0x3C; ++k ) /*0x8963*/
 ::p_i[k] = k; /*0x8967*/
 loopCount = 0; /*0x8974*/
 if ( !n1000 ) /*0x897f*/
 goto LABEL_49; /*0x897f*/
LABEL_33:
 unusedVar = 0; /*0x8985*/
 n60 = 60; /*0x8991*/
 p_i = (__int64 *)::p_i; /*0x8998*/
 RtkUsbUndiPhyRegsConfig1(n0x8000, &p_i, descDst, a4); /*0x899c*/
 (*(void ( **)(__int64))(qword_E2F8 + 248))(100); /*0x89ad*/
 Index = *(_WORD *)(n0x8000 + 4440); /*0x89b3*/
 n511_1 = *(_WORD *)(n0x8000 + 4442); /*0x89ba*/
 if ( Index != n511_1 ) /*0x89c4*/
 {
 do /*0x89dd*/
 {
 if ( Index == 511 ) /*0x89ce*/
 Index = 0; /*0x89d0*/
 else
 ++Index; /*0x89d8*/
 }
 while ( Index != n511_1 ); /*0x89dd*/
 *(_WORD *)(n0x8000 + 4440) = Index; /*0x89df*/
 }
 allocStatus = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, 3000, &i); /*0x89fe*/
 if ( allocStatus >= 0 ) /*0x8a04*/
 {
 RtkUsbUndiZeroMem(i, 0xBB8u, zeroArg, a4); /*0x8a15*/
 n3000 = 3000; /*0x8a1a*/
 retryCount = 0; /*0x8a1d*/
 while ( 1 ) /*0x8a3c*/
 {
 Table = RtkUsbUndiPhyConfigGiga(n0x8000, (char **)&i, gigaCfgBuf, a4); /*0x8a3c*/
 (*(void ( **)(__int64))(qword_E2F8 + 248))(10); /*0x8a40*/
 if ( (unsigned __int64)++retryCount > 0x186A0 ) /*0x8a50*/
 break; /*0x8a50*/
 if ( Table != 19 ) /*0x8a57*/
 {
 if ( !RtkUsbUndiSetMem((_BYTE *)i, ::p_i, 60, a4) ) /*0x8a6d*/
 {
 allocStatus = 0; /*0x8a82*/
 (*(void ( **)(__int64))(qword_E2F8 + 72))(i); /*0x8a85*/
 if ( ++loopCount < n1000 ) /*0x8a8e*/
 goto LABEL_33; /*0x8a8e*/
 goto LABEL_49; /*0x8a8e*/
 }
 allocStatus = 0x8000000000000007uLL; /*0x8aa0*/
 RtkUsbUndiSerialPrint( /*0x8aaa*/
 MEMORY[0xD4D0], // "MAC LOOPBACK FAILED, Corrupt Packet Data, PKT len= %X!\n"
 tempVal); // "MAC LOOPBACK FAILED, Corrupt Packet Data, PKT len= %X!\n"
LABEL_48:
 (*(void ( **)(__int64))(qword_E2F8 + 72))(i); /*0x8abb*/
 goto LABEL_49; /*0x8ac6*/
 }
 }
 allocStatus = 0x8000000000000007uLL; /*0x8ab1*/
 goto LABEL_48; /*0x8ab1*/
 }
LABEL_49:
 n511_2 = *(_WORD *)(n0x8000 + 4440); /*0x8ace*/
 n511_3 = *(_WORD *)(n0x8000 + 4442); /*0x8ad5*/
 if ( n511_2 != n511_3 ) /*0x8adf*/
 {
 do /*0x8af3*/
 {
 if ( n511_2 == 511 ) /*0x8ae4*/
 n511_2 = 0; /*0x8ae6*/
 else
 ++n511_2; /*0x8aee*/
 }
 while ( n511_2 != n511_3 ); /*0x8af3*/
 *(_WORD *)(n0x8000 + 4440) = n511_2; /*0x8af5*/
 }
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 58896, 15, 1u, (_BYTE *)(n0x8000 + 5440), 2); /*0x8b27*/
 isDescriptorReady = *(_BYTE *)(n0x8000 + 4498) == 48; /*0x8b2c*/
 *(_BYTE *)(n0x8000 + 5444) = 0; /*0x8b33*/
 if ( isDescriptorReady ) /*0x8b3a*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(3000000); /*0x8b3f*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 3000000); /*0x8b51*/
 return allocStatus; /*0x8b62*/
}

// RtkUsbUndiComponentNameGet @ 0x8b78 __int64 RtkUsbUndiComponentNameGet(
 __int64 a1,
 __int64 a2,
 __int64 a3,
 int n2,
 _BYTE *a5,
 __int64 a6,
 __int64 a7,
 __int64 a8)
{
 double v8; // xmm3_8 _BYTE *v12; // rbx __int64 v13; // r8 __int64 result; // rax __int64 v15; // r8 unsigned __int64 v16; // rbx unsigned __int64 v17; // rcx __int64 v18; // rsi _BYTE *v19; // rax _QWORD *v20; // rcx unsigned __int64 n1000; // rdx __int64 v22; // [rsp+30h] [rbp-28h] BYREF unsigned __int64 v23; // [rsp+38h] [rbp-20h] BYREF _BYTE v24[24]; // [rsp+40h] [rbp-18h] BYREF _QWORD *v25; // [rsp+68h] [rbp+10h] BYREF if ( !a2 ) /*0x8b98*/
 return 0x8000000000000002uLL; /*0x8b98*/
 v12 = a5; /*0x8b9e*/
 if ( !a5 || !a8 || !a7 || !a6 ) /*0x8bd6*/
 return 0x8000000000000002uLL; /*0x8d80*/
 if ( RtkUsbUndiAsciiStrCmp( /*0x8c16*/
 a5,
 (char *)MEMORY[0xD3AC], // "eng"
 a3,
 v8) && RtkUsbUndiAsciiStrCmp(
 v12,
 MEMORY[0xD4C4], // "en-US"
 v13,
 v8)
 || n2 == 2 ) // "en-US"
 {
 return 0x8000000000000003uLL; /*0x8c16*/
 }
 if ( (*(__int64 ( **)(__int64, void *, _BYTE *, __int64, __int64, int))(qword_E2F8 + 280))( /*0x8c5f*/
 a2,
 &unk_BB40,
 v24,
 MEMORY[0xBBA8],
 a2,
 16) != 0x8000000000000014uLL )
 {
 (*(void ( **)(__int64, void *, __int64, __int64))(qword_E2F8 + 288))(a2, &unk_BB40, MEMORY[0xBBA8], a2); /*0x8c72*/
 return 0x8000000000000003uLL; /*0x8c0e*/
 }
 result = (*(__int64 ( **)(__int64, void *, _QWORD **, __int64, __int64, int))(qword_E2F8 + 280))( /*0x8c9a*/
 a2,
 &unk_BD00,
 &v25,
 MEMORY[0xBBA8],
 a2,
 2);
 if ( result >= 0 ) /*0x8ca3*/
 {
 v16 = 0x8000000000000003uLL; /*0x8ca9*/
 if ( a3 ) /*0x8cb6*/
 {
 (*(void ( **)(__int64, void *, __int64 *, unsigned __int64 *))(qword_E2F8 + 296))( /*0x8cd3*/
 a2,
 &unk_BB50,
 &v22,
 &v23);
 v17 = 0; /*0x8ce3*/
 v18 = 0x8000000000000003uLL; /*0x8ce5*/
 if ( v23 ) /*0x8ceb*/
 {
 v19 = (_BYTE *)(v22 + 16); /*0x8ced*/
 while ( *((_QWORD *)v19 - 1) != a3 || (*v19 & 8) == 0 ) /*0x8cfa*/
 {
 ++v17; /*0x8cfc*/
 v19 += 24; /*0x8cff*/
 if ( v17 >= v23 ) /*0x8d06*/
 goto LABEL_21; /*0x8d06*/
 }
 v18 = 0; /*0x8d0a*/
 }
LABEL_21:
 (*(void ( **)(__int64))(qword_E2F8 + 72))(v22); /*0x8d16*/
 if ( v18 < 0 ) /*0x8d1c*/
 return v16; /*0x8d1c*/
 }
 v20 = (_QWORD *)(*v25 - 360LL); /*0x8d2b*/
 if ( *v20 != 1768189557 ) /*0x8d39*/
 {
 RtkUsbUndiAssert( /*0x8d4e*/
 (__int64)MEMORY[0xD540], // "f:\\uefi\\edk2\\OptionRomPkg\\SRC\\RtUefiUsbEDK2\\Diagnostic.c"
 450,
 (__int64)MEMORY[0xD310], // "CR has Bad Signature"
 v8); // "CR has Bad Signature"
 v20 = (_QWORD *)*v25; /*0x8d58*/
 }
 if ( n2 ) /*0x8d5d*/
 {
 if ( n2 != 1 ) /*0x8d61*/
 return v16; /*0x8d21*/
 n1000 = 1000; /*0x8d63*/
 }
 else
 {
 n1000 = 10; /*0x8d6a*/
 }
 return RtkUsbUndiTxRxInit((__int64)(v20 + 53), n1000, v15, v8); /*0x8d7e*/
 }
 return result; /*0x8d99*/
}

// RtkUsbUndiControlTransferUsb2 @ 0x8da0 __int64 RtkUsbUndiControlTransferUsb2(
 __int64 a1,
 unsigned __int16 a2,
 __int16 a3,
 __int16 a4,
 unsigned __int8 a5,
 _BYTE *a6,
 int a7)
{
 double v7; // xmm3_8 unsigned __int16 v13; // bx __int64 v14; // r15 unsigned int v15; // r12d __int64 v16; // rbx __int64 ( **v17)(_QWORD, _WORD *, _QWORD, _QWORD, _BYTE *, __int64, int *); // r10 __int64 v18; // r14 _WORD v19[4]; // [rsp+40h] [rbp-10h] BYREF _BYTE *v20; // [rsp+48h] [rbp-8h] BYREF int n16; // [rsp+80h] [rbp+30h] BYREF v20 = 0; /*0x8db9*/
 if ( *(_QWORD *)(a1 + 5368) ) /*0x8dbe*/
 return 0x8000000000000007uLL; /*0x8dd6*/
 if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x8df3*/
 {
 v13 = a2; /*0x8e16*/
 }
 else
 {
 v13 = a2; /*0x8e06*/
 if ( (a2 & 3) != 0 ) /*0x8e0b*/
 v13 = a2 - (a2 & 3) + 4; /*0x8e10*/
 }
 v14 = v13; /*0x8e20*/
 (*(void ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))(4, v13, &v20); /*0x8e2e*/
 v19[1] = a3; /*0x8e35*/
 v15 = 1000 *a7; /*0x8e3a*/
 v19[3] = v13; /*0x8e46*/
 v19[0] = 1472; /*0x8e4a*/
 v16 = 0; /*0x8e54*/
 v19[2] = a4 | (a5 << 8); /*0x8e56*/
 while ( 1 ) /*0x8e5a*/
 {
 v17 = *(__int64 ( ***)(_QWORD, _WORD *, _QWORD, _QWORD, _BYTE *, __int64, int *))(a1 + 4872); /*0x8e5a*/
 n16 = 0; /*0x8e61*/
 v18 = (*v17)(v17, v19, 0, v15, v20, v14, &n16); /*0x8e8c*/
 if ( v18 >= 0 ) /*0x8e92*/
 break; /*0x8e92*/
 if ( n16 == 16 && ++v16 < 2 ) /*0x8ea1*/
 continue; /*0x8ea1*/
 ++*(_QWORD *)(a1 + 5368); /*0x8ea3*/
 goto LABEL_14; /*0x8eaa*/
 }
 if ( a2 ) /*0x8eb3*/
 RtkUsbUndiCopyMem(a6, v20, a2, v7); /*0x8ebd*/
LABEL_14:
 (*(void ( **)(_BYTE *))(qword_E2F8 + 72))(v20); /*0x8ec2*/
 return v18; /*0x8ee0*/
}

// RtkUsbUndiControlTransferUsb3 @ 0x8eec __int64 RtkUsbUndiControlTransferUsb3(
 __int64 a1,
 unsigned __int16 a2,
 __int16 a3,
 __int16 a4,
 unsigned __int8 a5,
 _BYTE *a6,
 int a7)
{
 double v7; // xmm3_8 unsigned __int16 v13; // bx __int64 v14; // r15 unsigned int v15; // r14d __int64 v16; // rbx __int64 ( **v17)(_QWORD, _WORD *, __int64, _QWORD, _BYTE *, __int64, int *); // r10 __int64 v18; // rsi _WORD v19[4]; // [rsp+40h] [rbp-10h] BYREF _BYTE *v20; // [rsp+48h] [rbp-8h] BYREF int n16; // [rsp+80h] [rbp+30h] BYREF v20 = 0; /*0x8f05*/
 if ( *(_QWORD *)(a1 + 5368) ) /*0x8f0a*/
 return 0x8000000000000007uLL; /*0x8f22*/
 if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x8f3f*/
 {
 v13 = a2; /*0x8f62*/
 }
 else
 {
 v13 = a2; /*0x8f52*/
 if ( (a2 & 3) != 0 ) /*0x8f57*/
 v13 = a2 - (a2 & 3) + 4; /*0x8f5c*/
 }
 v14 = v13; /*0x8f6c*/
 (*(void ( **)(__int64, _QWORD, _BYTE **))(qword_E2F8 + 64))(4, v13, &v20); /*0x8f7a*/
 if ( a2 ) /*0x8f84*/
 RtkUsbUndiCopyMem(v20, a6, a2, v7); /*0x8f8e*/
 v19[3] = v13; /*0x8f97*/
 v19[0] = 1344; /*0x8f9b*/
 v19[1] = a3; /*0x8fa5*/
 v19[2] = a4 | (a5 << 8); /*0x8fae*/
 v15 = 1000 *a7; /*0x8fb2*/
 v16 = 0; /*0x8fba*/
 while ( 1 ) /*0x8fbc*/
 {
 v17 = *(__int64 ( ***)(_QWORD, _WORD *, __int64, _QWORD, _BYTE *, __int64, int *))(a1 + 4872); /*0x8fbc*/
 n16 = 0; /*0x8fc3*/
 v18 = (*v17)(v17, v19, 1, v15, v20, v14, &n16); /*0x8ff1*/
 if ( v18 >= 0 ) /*0x8ff7*/
 break; /*0x8ff7*/
 if ( n16 == 16 && ++v16 < 2 ) /*0x9006*/
 continue; /*0x9006*/
 ++*(_QWORD *)(a1 + 5368); /*0x9008*/
 break; /*0x9008*/
 }
 (*(void ( **)(_BYTE *))(qword_E2F8 + 72))(v20); /*0x900f*/
 return v18; /*0x902d*/
}

// RtkUsbUndiPhyWrite @ 0x903c __int64 RtkUsbUndiPhyWrite(__int64 a1, unsigned __int8 a2, unsigned __int16 a3, int a4)
{
 unsigned __int8 Index; // si __int64 result; // rax signed int Result; // [rsp+50h] [rbp+8h] BYREF unsigned __int16 v9; // [rsp+60h] [rbp+18h] BYREF v9 = a3; /*0x9047*/
 if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x9066*/
 return RtkUsbUndiControlTransferUsb3(a1, 2u, (a2 << 8) | 0x60u, 0, 0, &v9, a4); /*0x9145*/
 Index = 0; /*0x907c*/
 Result = a3 | (a2 << 16) | 0x80000000; /*0x9092*/
 result = RtkUsbUndiControlTransferUsb3(a1, 4u, 56832, 15, 1u, &Result, a4); /*0x909f*/
 if ( result >= 0 ) /*0x90a7*/
 {
 while ( 1 ) /*0x9115*/
 {
 result = RtkUsbUndiControlTransferUsb2(a1, 4u, 56832, 0, 1u, &Result, a4); /*0x9115*/
 if ( result < 0 || Result >= 0 || Index >= 5u ) /*0x90c1*/
 break; /*0x90c1*/
 ++Index; /*0x90c7*/
 if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x90d1*/
 (*(void ( **)(__int64))(a1 + 4896))(10000); /*0x90d8*/
 else
 (*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 10000); /*0x90ec*/
 }
 }
 return result; /*0x9154*/
}

// RtkUsbUndiPhyRead @ 0x915c __int64 RtkUsbUndiPhyRead(__int64 a1, unsigned __int8 a2, _WORD *a3, int a4)
{
 unsigned __int8 Index; // si __int64 result; // rax int Result; // [rsp+68h] [rbp+20h] BYREF Result = a4; /*0x9167*/
 if ( *(_DWORD *)(a1 + 5000) == 1 ) /*0x9181*/
 return RtkUsbUndiControlTransferUsb2(a1, 2u, (a2 << 8) | 0x60u, 0, 0, a3, 2); /*0x9261*/
 Result = a2 << 16; /*0x91a4*/
 Index = 0; /*0x91ac*/
 result = RtkUsbUndiControlTransferUsb3(a1, 4u, 56832, 15, 1u, &Result, 2); /*0x91b8*/
 if ( result >= 0 ) /*0x91c0*/
 {
 while ( 1 ) /*0x922c*/
 {
 result = RtkUsbUndiControlTransferUsb2(a1, 4u, 56832, 0, 1u, &Result, 2); /*0x922c*/
 if ( result < 0 ) /*0x9234*/
 break; /*0x9234*/
 if ( Result < 0 ) /*0x91ce*/
 {
 *a3 = Result; /*0x9238*/
 return result; /*0x923c*/
 }
 if ( Index >= 5u ) /*0x91d4*/
 return result; /*0x91d4*/
 ++Index; /*0x91da*/
 if ( *(_BYTE *)(a1 + 4498) == 48 ) /*0x91e4*/
 (*(void ( **)(__int64))(a1 + 4896))(10000); /*0x91eb*/
 else
 (*(void ( **)(_QWORD, __int64))(a1 + 4928))(*(_QWORD *)(a1 + 4864), 10000); /*0x91ff*/
 }
 }
 return result; /*0x9270*/
}

// RtkUsbUndiCheckMediaStatus @ 0x9278 __int64 RtkUsbUndiCheckMediaStatus(__int64 n0x8000)
{
 unsigned int Result; // ebx int n4; // eax unsigned int n40960; // [rsp+50h] [rbp+8h] BYREF if ( !*(_BYTE *)(n0x8000 + 5393) /*0x92a2*/
 && RtkUsbUndiCheckLinkStatus(n0x8000, (bool *)&n40960, (unsigned int *)(n0x8000 + 212)) < 0 )
 {
 return 2; /*0x92a9*/
 }
 Result = 1; /*0x92b3*/
 if ( !(_BYTE)n40960 ) /*0x92b8*/
 {
 n4 = *(_DWORD *)(n0x8000 + 5000); /*0x92be*/
 if ( n4 == 1 ) /*0x92c6*/
 return (unsigned int)RtkUsbUndiPhyAutoNeg(n0x8000); /*0x938d*/
 if ( n4 <= 1 ) /*0x92cc*/
 return *(unsigned int *)(n0x8000 + 4996); /*0x92cc*/
 if ( n4 <= 4 ) /*0x92d5*/
 return (unsigned int)RtkUsbUndiPhySetAdv(n0x8000); /*0x9380*/
 if ( n4 <= 9 ) /*0x92de*/
 return (unsigned int)RtkUsbUndiPhyStartNeg(n0x8000); /*0x9376*/
 if ( n4 > 11 ) /*0x92e7*/
 {
 return *(unsigned int *)(n0x8000 + 4996); /*0x9382*/
 }
 else
 {
 n40960 = 40960; /*0x9313*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x931b*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46132, 0, 1u, &n40960, 2); /*0x9345*/
 Result = (((n40960 >> 14) & 1) == 0) | 2; /*0x9355*/
 if ( Result == 3 ) /*0x935b*/
 return (unsigned int)RtkUsbUndiPhyResolve(n0x8000); /*0x9392*/
 }
 }
 return Result; /*0x939b*/
}

// RtkUsbUndiPhyAutoNeg @ 0x93a4 __int64 RtkUsbUndiPhyAutoNeg(__int64 n0x8000)
{
 int v2; // r9d int v3; // r9d int v4; // r9d int v5; // r9d int v6; // edi unsigned int n0x4E20; // esi int v8; // r9d int v9; // r9d int v10; // r9d unsigned int Result; // edi int v12; // r9d int v13; // r9d unsigned __int16 v15; // [rsp+48h] [rbp+28h] BYREF RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x93ce*/
 RtkUsbUndiPhyWrite(n0x8000, 0x11u, 0x401Cu, 2); /*0x93e1*/
 RtkUsbUndiPhyWrite(n0x8000, 0xCu, 6u, 2); /*0x93f2*/
 RtkUsbUndiPhyRead(n0x8000, 0x14u, &v15, v2); /*0x9400*/
 RtkUsbUndiPhyWrite(n0x8000, 0x14u, v15 | 0x1000, 2); /*0x941c*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 5u, 2); /*0x942d*/
 RtkUsbUndiPhyRead(n0x8000, 9u, &v15, v3); /*0x943b*/
 RtkUsbUndiPhyWrite(n0x8000, 9u, v15 | 0x40, 2); /*0x9452*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 3u, 2); /*0x9463*/
 RtkUsbUndiPhyRead(n0x8000, 0, &v15, v4); /*0x9471*/
 v15 &= 0xFFCCu; /*0x948c*/
 RtkUsbUndiPhyWrite(n0x8000, 0, v15, 2); /*0x9491*/
 RtkUsbUndiPhyRead(n0x8000, 0, &v15, v5); /*0x949f*/
 RtkUsbUndiPhyWrite(n0x8000, 0, v15 | 0x8000, 2); /*0x94ba*/
 v6 = 0; /*0x94c3*/
 n0x4E20 = 0; /*0x94ca*/
 RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v8); /*0x94cc*/
 if ( (v15 & 0x1000) != 0 ) /*0x94d6*/
 {
LABEL_10:
 RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v9); /*0x9531*/
 LOBYTE(v6) = (v15 & 0xE00) == 2560; /*0x9553*/
 Result = v6 + 1; /*0x9557*/
 }
 else
 {
 while ( 1 ) /*0x94df*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x94df*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(100); /*0x94e6*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 100); /*0x94fa*/
 if ( n0x4E20 > 0x4E20 ) /*0x9506*/
 break; /*0x9506*/
 ++n0x4E20; /*0x9511*/
 if ( RtkUsbUndiPhyRead(n0x8000, 0x1Du, &v15, v10) < 0 || (v15 & 0x1000) != 0 ) /*0x9522*/
 {
 if ( n0x4E20 <= 0x4E20 ) /*0x952a*/
 goto LABEL_10; /*0x952a*/
 break; /*0x952a*/
 }
 }
 Result = 2; /*0x952c*/
 }
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 5u, 2); /*0x9567*/
 RtkUsbUndiPhyRead(n0x8000, 9u, &v15, v12); /*0x9575*/
 RtkUsbUndiPhyWrite(n0x8000, 9u, v15 & 0xFFBF, 2); /*0x9590*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x95a0*/
 RtkUsbUndiPhyRead(n0x8000, 0x14u, &v15, v13); /*0x95ae*/
 RtkUsbUndiPhyWrite(n0x8000, 0x14u, v15 & 0xEFFF, 2); /*0x95c9*/
 RtkUsbUndiPhyWrite(n0x8000, 0xCu, 0x1006u, 2); /*0x95dc*/
 return Result; /*0x95f2*/
}

// RtkUsbUndiPhySetAdv @ 0x95fc __int64 RtkUsbUndiPhySetAdv(__int64 n0x8000)
{
 int v2; // r9d int v3; // r9d int v4; // r9d int v5; // edi int Index; // esi int v7; // r9d unsigned int Result; // edi __int16 v10; // [rsp+48h] [rbp+10h] BYREF RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x961d*/
 RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0x712u, 2); /*0x9630*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 2u, 2); /*0x9640*/
 RtkUsbUndiPhyWrite(n0x8000, 0x10u, 0x6CFAu, 2); /*0x9653*/
 RtkUsbUndiPhyWrite(n0x8000, 0x11u, 0x1480u, 2); /*0x9666*/
 RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0xB0C9u, 2); /*0x9679*/
 RtkUsbUndiPhyWrite(n0x8000, 0x13u, 0x812Fu, 2); /*0x968c*/
 RtkUsbUndiPhyWrite(n0x8000, 0x14u, 0xC4Cu, 2); /*0x969f*/
 RtkUsbUndiPhyWrite(n0x8000, 0x15u, 0x8214u, 2); /*0x96b2*/
 RtkUsbUndiPhyWrite(n0x8000, 0x16u, 0x616Cu, 2); /*0x96c5*/
 RtkUsbUndiPhyWrite(n0x8000, 0x17u, 0xA5u, 2); /*0x96d8*/
 RtkUsbUndiPhyWrite(n0x8000, 0x18u, 0x224Eu, 2); /*0x96eb*/
 RtkUsbUndiPhyWrite(n0x8000, 0x19u, 0xB84u, 2); /*0x96fe*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Au, 0x7A27u, 2); /*0x9711*/
 RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v2); /*0x9720*/
 RtkUsbUndiPhyWrite(n0x8000, 0x10u, v10 | 0x8000, 2); /*0x973d*/
 RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v3); /*0x974c*/
 v5 = 0; /*0x9751*/
 Index = 0; /*0x9753*/
 while ( 1 ) /*0x97a1*/
 {
 if ( (v10 & 0x8000) == 0 ) /*0x97a7*/
 {
LABEL_8:
 RtkUsbUndiPhyRead(n0x8000, 0x1Cu, &v10, v4); /*0x97a9*/
 LOBYTE(v5) = (v10 & 0xE00) == 2560; /*0x97cd*/
 Result = v5 + 1; /*0x97d1*/
 goto LABEL_9; /*0x97d1*/
 }
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x975e*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x9765*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9779*/
 if ( (unsigned int)++Index > 0x7D0 ) /*0x9787*/
 break; /*0x9787*/
 if ( RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v7) < 0 ) /*0x979f*/
 goto LABEL_8; /*0x979f*/
 }
 Result = 2; /*0x9837*/
LABEL_9:
 RtkUsbUndiPhyRead(n0x8000, 0x10u, &v10, v7); /*0x97d3*/
 RtkUsbUndiPhyWrite(n0x8000, 0x10u, v10 & 0x7FFF, 2); /*0x97f9*/
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0, 2); /*0x9809*/
 RtkUsbUndiPhyWrite(n0x8000, 0x12u, 0x12u, 2); /*0x981d*/
 return Result; /*0x982e*/
}

// RtkUsbUndiPhyStartNeg @ 0x983c __int64 RtkUsbUndiPhyStartNeg(__int64 n0x8000)
{
 int v2; // edi unsigned int n0x1388; // esi unsigned int Result; // edi int v5; // r9d int n40960; // [rsp+88h] [rbp+48h] BYREF int v8; // [rsp+90h] [rbp+50h] BYREF n40960 = 40960; /*0x988a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x988d*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x98b7*/
 n40960 = v8 | 0xF00000; /*0x98cf*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x98e6*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x990a*/
 n40960 = v8 & 0x7FFFFFFF; /*0x9921*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9938*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x995c*/
 n40960 = v8 | 0x10000; /*0x9973*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x998a*/
 n40960 = 40960; /*0x998f*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x99b1*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x99d5*/
 v2 = 0; /*0x99da*/
 n0x1388 = 0; /*0x99e3*/
 if ( v8 >= 0 ) /*0x99e5*/
 {
 do /*0x9a4b*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x99f4*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x99f9*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9a0b*/
 ++n0x1388; /*0x9a11*/
 }
 while ( n0x1388 <= 0x1388 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2) >= 0 && v8 >= 0 ); /*0x9a4b*/
 }
 n40960 = -2144731136; /*0x9a70*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46132, 15, 1u, &n40960, 2); /*0x9a7c*/
 if ( n0x1388 <= 0x1388 ) /*0x9a87*/
 {
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0xA43u, 2); /*0x9a9c*/
 RtkUsbUndiPhyRead(n0x8000, 0x14u, &n40960, v5); /*0x9aaa*/
 LOBYTE(v2) = (_WORD)n40960 == 72; /*0x9ab4*/
 Result = v2 + 1; /*0x9ab8*/
 }
 else
 {
 Result = 2; /*0x9a89*/
 }
 n40960 = 40960; /*0x9ad7*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9ae3*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9b07*/
 n40960 = v8 & 0x7FFFFFFF; /*0x9b1e*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9b35*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9b59*/
 n40960 = v8 & 0xFF0FFFFF; /*0x9b75*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9b89*/
 return Result; /*0x9b98*/
}

// RtkUsbUndiPhyResolve @ 0x9ba8 __int64 RtkUsbUndiPhyResolve(__int64 n0x8000)
{
 int v2; // edi unsigned int n0x1388; // esi unsigned int Result; // edi int v5; // r9d int n40960; // [rsp+88h] [rbp+48h] BYREF int v8; // [rsp+90h] [rbp+50h] BYREF n40960 = 40960; /*0x9bf6*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9bf9*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9c23*/
 n40960 = v8 | 0xF00000; /*0x9c3b*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9c52*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9c76*/
 n40960 = v8 & 0x7FFFFFFF; /*0x9c8d*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ca4*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9cc8*/
 n40960 = v8 | 0x10000; /*0x9cdf*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9cf6*/
 n40960 = 40960; /*0x9cfb*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9d1d*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9d41*/
 v2 = 0; /*0x9d46*/
 n0x1388 = 0; /*0x9d4f*/
 if ( v8 >= 0 ) /*0x9d51*/
 {
 do /*0x9db7*/
 {
 if ( *(_BYTE *)(n0x8000 + 4498) == 48 ) /*0x9d60*/
 (*(void ( **)(__int64))(n0x8000 + 4896))(1000); /*0x9d65*/
 else
 (*(void ( **)(_QWORD, __int64))(n0x8000 + 4928))(*(_QWORD *)(n0x8000 + 4864), 1000); /*0x9d77*/
 ++n0x1388; /*0x9d7d*/
 }
 while ( n0x1388 <= 0x1388 && RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2) >= 0 && v8 >= 0 ); /*0x9db7*/
 }
 n40960 = -2144665600; /*0x9ddc*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46132, 15, 1u, &n40960, 2); /*0x9de8*/
 if ( n0x1388 <= 0x1388 ) /*0x9df3*/
 {
 RtkUsbUndiPhyWrite(n0x8000, 0x1Fu, 0xA43u, 2); /*0x9e08*/
 RtkUsbUndiPhyRead(n0x8000, 0x14u, &n40960, v5); /*0x9e16*/
 LOBYTE(v2) = (_WORD)n40960 == 72; /*0x9e20*/
 Result = v2 + 1; /*0x9e24*/
 }
 else
 {
 Result = 2; /*0x9df5*/
 }
 n40960 = 40960; /*0x9e43*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 59500, 15, 1u, &n40960, 2); /*0x9e4f*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9e73*/
 n40960 = v8 & 0x7FFFFFFF; /*0x9e8a*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ea1*/
 RtkUsbUndiControlTransferUsb2(n0x8000, 4u, 46112, 0, 1u, &v8, 2); /*0x9ec5*/
 n40960 = v8 & 0xFF0FFFFF; /*0x9ee1*/
 RtkUsbUndiControlTransferUsb3(n0x8000, 4u, 46112, 15, 1u, &n40960, 2); /*0x9ef5*/
 return Result; /*0x9f04*/
}

// RtkUsbUndiStrLen16 @ 0x9f14 __int64 RtkUsbUndiStrLen16(_WORD *Realtek_USB_Ethernet_Controller, __int64 n321, __int64 n320, double a4)
{
 _WORD *Realtek_USB_Ethernet_Controller_1; // rbx __int64 result; // rax Realtek_USB_Ethernet_Controller_1 = Realtek_USB_Ethernet_Controller; /*0x9f20*/
 if ( !Realtek_USB_Ethernet_Controller ) /*0x9f26*/
 RtkUsbUndiAssert( /*0x9f3b*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 172,
 (__int64)MEMORY[0xD5B0], // "String != ((void *) 0)"
 a4); // "String != ((void *) 0)"
 if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller_1 & 1) != 0 ) /*0x9f43*/
 RtkUsbUndiAssert( /*0x9f58*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 173,
 (__int64)MEMORY[0xD5C8], // "((UINTN) String & 0x00000001) == 0"
 a4); // "((UINTN) String & 0x00000001) == 0"
 result = 0; /*0x9f5d*/
 while ( *Realtek_USB_Ethernet_Controller_1 ) /*0x9f6c*/
 {
 ++Realtek_USB_Ethernet_Controller_1; /*0x9f62*/
 ++result; /*0x9f66*/
 }
 return result; /*0x9f73*/
}

// RtkUsbUndiStrLen8 @ 0x9f7c __int64 RtkUsbUndiStrLen8(_BYTE *a1, __int64 a2, __int64 a3, double a4)
{
 _BYTE *v4; // rbx __int64 result; // rax v4 = a1; /*0x9f82*/
 if ( !a1 ) /*0x9f88*/
 RtkUsbUndiAssert( /*0x9f9d*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 1229,
 (__int64)MEMORY[0xD5B0], // "String != ((void *) 0)"
 a4); // "String != ((void *) 0)"
 for ( result = 0; *v4; ++result ) /*0x9fa4*/
 ++v4; /*0x9fa8*/
 return result; /*0x9fb3*/
}

// RtkUsbUndiAsciiStrCmp @ 0x9fbc __int64 RtkUsbUndiAsciiStrCmp(_BYTE *a1, char *eng, __int64 a3, double a4)
{
 char *eng_1; // rdi _BYTE *v5; // rbx __int64 Size; // rdx __int64 Size; // r8 eng_1 = eng; /*0x9fc6*/
 v5 = a1; /*0x9fc9*/
 if ( RtkUsbUndiStrLen8(a1, (__int64)eng, a3, a4) == -1 ) /*0x9fd4*/
 RtkUsbUndiAssert( /*0x9fe9*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 1305,
 (__int64)MEMORY[0xD5F0], // "AsciiStrSize (FirstString)"
 a4); // "AsciiStrSize (FirstString)"
 if ( RtkUsbUndiStrLen8(eng_1, Size, Size, a4) == -1 ) /*0x9ff9*/
 RtkUsbUndiAssert( /*0xa00e*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 1306,
 (__int64)MEMORY[0xD610], // "AsciiStrSize (SecondString)"
 a4); // "AsciiStrSize (SecondString)"
 while ( *v5 && *v5 == *eng_1 ) /*0xa017*/
 {
 ++v5; /*0xa019*/
 ++eng_1; /*0xa01c*/
 }
 return (char)*v5 - *eng_1; /*0xa035*/
}

// RtkUsbUndiUnicodeToAscii @ 0xa03c __int64 RtkUsbUndiUnicodeToAscii(_BYTE *eng, _BYTE *a2, __int64 a3, double a4)
{
 unsigned __int64 v4; // rsi _BYTE *v5; // rdi _BYTE *eng_1; // rbx __int64 Size; // rdx __int64 Size; // r8 v4 = a3; /*0xa04b*/
 v5 = a2; /*0xa04e*/
 eng_1 = eng; /*0xa051*/
 if ( !a3 ) /*0xa057*/
 return 0; /*0xa059*/
 if ( RtkUsbUndiStrLen8(eng, (__int64)a2, a3, a4) == -1 ) /*0xa065*/
 RtkUsbUndiAssert( /*0xa07a*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 1467,
 (__int64)MEMORY[0xD5F0], // "AsciiStrSize (FirstString)"
 a4); // "AsciiStrSize (FirstString)"
 if ( RtkUsbUndiStrLen8(v5, Size, Size, a4) == -1 ) /*0xa08a*/
 RtkUsbUndiAssert( /*0xa09f*/
 (__int64)MEMORY[0xD580], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\String.c"
 1468,
 (__int64)MEMORY[0xD610], // "AsciiStrSize (SecondString)"
 a4); // "AsciiStrSize (SecondString)"
 while ( *eng_1 && *eng_1 == *v5 && v4 > 1 ) /*0xa0ae*/
 {
 ++eng_1; /*0xa0b0*/
 ++v5; /*0xa0b3*/
 --v4; /*0xa0b6*/
 }
 return (char)*eng_1 - (char)*v5; /*0xa0d4*/
}

// RtkUsbUndiDebugPrint @ 0xa0dc __int64 RtkUsbUndiDebugPrint(int a1, char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)
{
 double v2; // xmm3_8 __int64 result; // rax char Realtek_USB_Ethernet_Controller[536]; // [rsp+20h] [rbp-218h] BYREF va_list va; // [rsp+250h] [rbp+18h] BYREF va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);
 if ( !_nASSERT_EFI_ERROR_(Status___%r)_n ) /*0xa0fd*/
 RtkUsbUndiAssert( /*0xa110*/
 (__int64)MEMORY[0xD658], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDebugLibStdErr\\DebugLib.c"
 61,
 (__int64)MEMORY[0xD640], // "Format != ((void *) 0)"
 v2); // "Format != ((void *) 0)"
 result = 2147483714LL; /*0xa115*/
 if ( (a1 & 0x80000042) != 0 ) /*0xa11d*/
 {
 RtkUsbUndiPrintString( /*0xa134*/
 Realtek_USB_Ethernet_Controller,
 0x100u,
 _nASSERT_EFI_ERROR_(Status___%r)_n,
 (unsigned __int16 **)va);
 result = qword_E2F0; /*0xa139*/
 if ( qword_E2F0 ) /*0xa143*/
 {
 result = *(_QWORD *)(qword_E2F0 + 80); /*0xa145*/
 if ( result ) /*0xa14c*/
 return (*(__int64 ( **)(__int64, char *))(result + 8))(result, Realtek_USB_Ethernet_Controller); /*0xa156*/
 }
 }
 return result; /*0xa159*/
}

// RtkUsbUndiAssert @ 0xa164 void RtkUsbUndiAssert(__int64 a1, int a2, __int64 a3, double a4)
{
 __int64 v4; // rax _BYTE ErrorLevel[520]; // [rsp+40h] [rbp-208h] BYREF RtkUsbUndiSPrint((int)ErrorLevel, 0x200u, "ASSERT [%a] %a(%d): %a\n", a4, *(double *)&a1, a2, *(double *)&a3);
 if ( qword_E2F0 ) /*0xa1a1*/
 {
 v4 = *(_QWORD *)(qword_E2F0 + 80); /*0xa1a3*/
 if ( v4 ) /*0xa1aa*/
 (*(void ( **)(__int64, _BYTE *))(v4 + 8))(v4, ErrorLevel); /*0xa1b4*/
 }
 while ( 1 ) /*0xa1c3*/
 ; /*0xa1c3*/
}

// RtkUsbUndiCopyMem @ 0xa1d8 _BYTE *RtkUsbUndiCopyMem(_BYTE *a1, _BYTE *a2, __int64 a3, double a4)
{
 unsigned __int64 v4; // r14 __int64 Index; // rsi _BYTE *v8; // rcx __int64 Index; // rdi _BYTE *v10; // rdx __int64 v11; // rcx v4 = a3 - 1; /*0xa1f5*/
 Index = a3; /*0xa1f9*/
 if ( a3 - 1 > (unsigned __int64)(-1LL - (_QWORD)a1) ) /*0xa20b*/
 RtkUsbUndiAssert( /*0xa21e*/
 (__int64)MEMORY[0xD718], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c"
 56,
 (__int64)MEMORY[0xD6D0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)"
 a4);
 if ( v4 > -1 - (__int64)a2 ) /*0xa229*/
 RtkUsbUndiAssert( /*0xa23e*/
 (__int64)MEMORY[0xD718], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CopyMemWrapper.c"
 57,
 (__int64)MEMORY[0xD758], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)"
 a4);
 if ( a2 != a1 ) /*0xa246*/
 {
 if ( a2 <= a1 ) /*0xa248*/
 {
 if ( a2 < a1 ) /*0xa25f*/
 {
 v10 = &a1[Index]; /*0xa261*/
 v11 = Index; /*0xa268*/
 do /*0xa276*/
 *--v10 = a2[--v11]; /*0xa274*/
 while ( v11 ); /*0xa276*/
 }
 }
 else
 {
 v8 = a1; /*0xa24a*/
 Index = a2 - a1; /*0xa24d*/
 do /*0xa25b*/
 {
 *v8 = v8[Index]; /*0xa253*/
 ++v8; /*0xa255*/
 --Index; /*0xa258*/
 }
 while ( Index ); /*0xa25b*/
 }
 }
 return a1; /*0xa28f*/
}

// RtkUsbUndiZeroMem @ 0xa298 __int64 RtkUsbUndiZeroMem(__int64 i, unsigned __int64 a2, __int64 a3, double a4)
{
 unsigned __int64 v4; // rbx _BYTE *j; // rax v4 = a2; /*0xa2a2*/
 if ( !i && a2 ) /*0xa2b0*/
 RtkUsbUndiAssert( /*0xa2c3*/
 (__int64)MEMORY[0xD7C0], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c"
 49,
 (__int64)MEMORY[0xD798], // "!(Buffer == ((void *) 0) && Length > 0)"
 a4);
 if ( v4 > -i ) /*0xa2d1*/
 RtkUsbUndiAssert( /*0xa2e6*/
 (__int64)MEMORY[0xD7C0], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\ZeroMemWrapper.c"
 50,
 (__int64)MEMORY[0xD800], // "Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)"
 a4);
 for ( j = (_BYTE *)i; v4; --v4 ) /*0xa2f1*/
 *j++ = 0; /*0xa2f3*/
 return i; /*0xa306*/
}

// RtkUsbUndiSetMem @ 0xa30c unsigned __int64 RtkUsbUndiSetMem(_BYTE *i, _BYTE *p_i, __int64 n32, double a4)
{
 _BYTE *p_i_1; // rbx _BYTE *i_1; // rdi unsigned __int64 v8; // rsi p_i_1 = p_i; /*0xa323*/
 i_1 = i; /*0xa326*/
 if ( i == p_i ) /*0xa32c*/
 return 0; /*0xa32e*/
 if ( !i ) /*0xa338*/
 RtkUsbUndiAssert( /*0xa34b*/
 (__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
 60,
 (__int64)MEMORY[0xD838], // "DestinationBuffer != ((void *) 0)"
 a4);
 if ( !p_i_1 ) /*0xa353*/
 RtkUsbUndiAssert( /*0xa366*/
 (__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
 61,
 (__int64)MEMORY[0xD8A0], // "SourceBuffer != ((void *) 0)"
 a4);
 v8 = n32 - 1; /*0xa36f*/
 if ( v8 > -1 - (__int64)i_1 ) /*0xa37b*/
 RtkUsbUndiAssert( /*0xa38e*/
 (__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
 62,
 (__int64)MEMORY[0xD6D0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)"
 a4);
 if ( v8 > -1 - (__int64)p_i_1 ) /*0xa399*/
 RtkUsbUndiAssert( /*0xa3ae*/
 (__int64)MEMORY[0xD860], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\CompareMemWrapper.c"
 63,
 (__int64)MEMORY[0xD758], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)"
 a4);
 for ( ; v8; --v8 ) /*0xa3b6*/
 {
 if ( *i_1 != *p_i_1 ) /*0xa3bc*/
 break; /*0xa3bc*/
 ++i_1; /*0xa3be*/
 ++p_i_1; /*0xa3c1*/
 }
 return (unsigned __int8)*i_1 - (unsigned __int64)(unsigned __int8)*p_i_1; /*0xa3e1*/
}

// RtkUsbUndiIsZero @ 0xa3e8 __int16 *RtkUsbUndiIsZero(__int16 *p_i, __int64 n8, char n255, double a4)
{
 __int64 n8_1; // rbx __int16 *i; // rax n8_1 = n8; /*0xa405*/
 if ( n8 - 1 > (unsigned __int64)(-1LL - (_QWORD)p_i) ) /*0xa40e*/
 RtkUsbUndiAssert( /*0xa423*/
 (__int64)MEMORY[0xD8F8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseMemoryLib\\SetMemWrapper.c"
 54,
 (__int64)MEMORY[0xD8C0], // "(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer)"
 a4);
 for ( i = p_i; n8_1; --n8_1 ) /*0xa42e*/
 {
 *(_BYTE *)i = n255; /*0xa430*/
 i = (__int16 *)((char *)i + 1); /*0xa433*/
 }
 return p_i; /*0xa448*/
}

// RtkUsbUndiInternalHwAccess @ 0xa450 char RtkUsbUndiInternalHwAccess(__int64 i, __int64 a2, __int64 a3, double a4)
{
 if ( !i ) /*0xa45c*/
 RtkUsbUndiAssert( /*0xa46f*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 109,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 return *(_BYTE *)i; /*0xa476*/
}

// RtkUsbUndiInternalHwAccess2 @ 0xa47c char RtkUsbUndiInternalHwAccess2(__int64 i, __int64 a2, __int64 a3, double a4)
{
 if ( !i ) /*0xa488*/
 RtkUsbUndiAssert( /*0xa49d*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 131,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 return *(_BYTE *)(i + 1); /*0xa4a5*/
}

// RtkUsbUndiAsciiStrToUint @ 0xa4ac __int64 RtkUsbUndiAsciiStrToUint(__int64 i, __int64 a2, __int64 a3, double a4)
{
 unsigned __int16 *v5; // rbx if ( !i ) /*0xa4b8*/
 RtkUsbUndiAssert( /*0xa4cd*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 156,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 v5 = (unsigned __int16 *)(i + 2); /*0xa4d2*/
 if ( !v5 ) /*0xa4d6*/
 RtkUsbUndiAssert( /*0xa4e9*/
 (__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
 38,
 (__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
 a4);
 return *v5; /*0xa4f1*/
}

// RtkUsbUndiHexChar @ 0xa4f8 __int64 RtkUsbUndiHexChar(__int64 i, __int64 a2, __int64 a3, double a4)
{
 if ( !i ) /*0xa504*/
 RtkUsbUndiAssert( /*0xa519*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 180,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 return i + RtkUsbUndiAsciiStrToUint(i, a2, a3, a4); /*0xa529*/
}

// RtkUsbUndiAsciiToUpper @ 0xa530 bool RtkUsbUndiAsciiToUpper(__int64 i, __int64 a2, __int64 a3, double a4)
{
 if ( !i ) /*0xa53c*/
 RtkUsbUndiAssert( /*0xa551*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 210,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 return RtkUsbUndiInternalHwAccess(i, a2, a3, a4) == 127; /*0xa563*/
}

// RtkUsbUndiAsciiStrToUint64 @ 0xa56c char RtkUsbUndiAsciiStrToUint64(__int64 i, __int64 a2, __int64 a3, double a4)
{
 char Result; // bl __int64 v6; // rdx __int64 v7; // r8 Result = 0; /*0xa576*/
 if ( !i ) /*0xa57e*/
 RtkUsbUndiAssert( /*0xa593*/
 (__int64)MEMORY[0xDA60], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiDevicePathLib\\DevicePathUtilities.c"
 237,
 (__int64)MEMORY[0xDAA8], // "Node != ((void *) 0)"
 a4);
 if ( RtkUsbUndiAsciiToUpper(i, a2, a3, a4) && RtkUsbUndiInternalHwAccess2(i, v6, v7, a4) == -1 ) /*0xa5ae*/
 return 1; /*0xa5b0*/
 return Result; /*0xa5b9*/
}

// RtkUsbUndiAsciiStrToUint64S @ 0xa5c0 bool RtkUsbUndiAsciiStrToUint64S(_DWORD *eng, _DWORD *a2, __int64 a3, double a4)
{
 int Result; // ebx if ( !eng ) /*0xa5d3*/
 RtkUsbUndiAssert( /*0xa5e6*/
 (__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
 89,
 (__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
 a4);
 Result = *eng & 0xFFFFFF; /*0xa5ed*/
 if ( !a2 ) /*0xa5f6*/
 RtkUsbUndiAssert( /*0xa609*/
 (__int64)MEMORY[0xE1C8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\Unaligned.c"
 89,
 (__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
 a4);
 return Result == (*a2 & 0xFFFFFF); /*0xa61f*/
}

// RtkUsbUndiAsciiStrToUint64Wrap @ 0xa628 unsigned __int64 RtkUsbUndiAsciiStrToUint64Wrap(_DWORD *eng, _BYTE *eng_4, __int64 a3, _QWORD *a4, char a5)
{
 double v5; // xmm3_8 __int64 v7; // rsi _DWORD *eng_1; // rbx char i; // al __int64 Index; // rdi char n59_2; // al _BYTE *eng_2; // rbx char n59; // al __int64 Index; // rdi char n59_1; // cl _BYTE *eng_3; // rdx v7 = a3; /*0xa644*/
 eng_1 = eng_4; /*0xa647*/
 if ( !a4 ) /*0xa650*/
 return 0x8000000000000002uLL; /*0xa652*/
 if ( eng_4 && a3 ) /*0xa66d*/
 {
 for ( i = *eng_4; i; i = *(_BYTE *)eng_1 ) /*0xa673*/
 {
 if ( a5 ) /*0xa682*/
 {
 if ( RtkUsbUndiAsciiStrToUint64S(eng, eng_1, a3, v5) ) /*0xa68a*/
 goto LABEL_20; /*0xa691*/
 eng_1 = (_DWORD *)((char *)eng_1 + 3); /*0xa693*/
 }
 else
 {
 Index = 0; /*0xa699*/
 while ( i && i != 59 ) /*0xa69f*/
 i = *((_BYTE *)eng_1 + ++Index); /*0xa6a4*/
 if ( !RtkUsbUndiUnicodeToAscii(eng_1, eng, Index, v5) && !*((_BYTE *)eng + Index) ) /*0xa6c1*/
 {
LABEL_20:
 eng_2 = *(_BYTE **)v7; /*0xa6dd*/
 if ( !*(_QWORD *)v7 ) /*0xa6e3*/
 return 0x8000000000000003uLL; /*0xa6e3*/
 n59 = *eng_2; /*0xa6e5*/
 while ( 1 ) /*0xa72a*/
 {
 if ( !n59 ) /*0xa72c*/
 {
LABEL_32:
 v7 += 16; /*0xa72e*/
 goto LABEL_20; /*0xa732*/
 }
 Index = 0; /*0xa6e9*/
 while ( n59 && n59 != 59 ) /*0xa6ef*/
 n59 = eng_2[++Index]; /*0xa6f4*/
 if ( !RtkUsbUndiUnicodeToAscii(eng_2, eng, Index, v5) ) /*0xa704*/
 break; /*0xa704*/
 eng_2 += Index; /*0xa70e*/
 n59 = *eng_2; /*0xa711*/
 if ( !*eng_2 ) /*0xa715*/
 goto LABEL_32; /*0xa715*/
 n59_1 = *eng_2; /*0xa717*/
 eng_3 = eng_2; /*0xa719*/
 do /*0xa724*/
 {
 if ( n59_1 != 59 ) /*0xa71f*/
 break; /*0xa71f*/
 n59_1 = *++eng_3; /*0xa724*/
 }
 while ( *eng_3 ); /*0xa724*/
 }
 *a4 = *(_QWORD *)(v7 + 8); /*0xa738*/
 return 0; /*0xa73d*/
 }
 eng_1 = (_DWORD *)((char *)eng_1 + Index); /*0xa6c3*/
 n59_2 = *(_BYTE *)eng_1; /*0xa6c6*/
 if ( !*(_BYTE *)eng_1 ) /*0xa6ca*/
 return 0x8000000000000003uLL; /*0xa6ca*/
 do /*0xa6d3*/
 {
 if ( n59_2 != 59 ) /*0xa6ce*/
 break; /*0xa6ce*/
 eng_1 = (_DWORD *)((char *)eng_1 + 1); /*0xa6d0*/
 n59_2 = *(_BYTE *)eng_1; /*0xa6d3*/
 }
 while ( *(_BYTE *)eng_1 ); /*0xa6d3*/
 }
 }
 }
 return 0x8000000000000003uLL; /*0xa75d*/
}

// RtkUsbUndiAsciiStrDecimalToUint64 @ 0xa764 __int64 RtkUsbUndiAsciiStrDecimalToUint64(
 _DWORD *eng,
 _BYTE *eng_3,
 char ***a3,
 _WORD *Realtek_USB_Ethernet_Controller,
 char a5)
{
 double v5; // xmm3_8 _DWORD *eng_1; // rbx char i; // al __int16 *Wrong_Interrupt_size_n; // rcx __int64 v13; // rdi char n59; // al char **v15; // rsi __int64 v16; // rdi char **v17; // rax __int64 v18; // r8 char **v19; // rbx __int64 v20; // rbp char n59_1; // al char *eng_2; // rbx char n59_2; // al char **v24; // rdx __int64 v25; // rax __int16 *Wrong_Interrupt_size_n_1; // rcx char *v27; // rax __int64 n321; // rdx __int64 n320; // r8 __int64 v30; // rdi __int64 v31; // rax __int16 *Wrong_Interrupt_size_n_2; // rcx char *v33; // rax __int64 n321_1; // rdx __int64 n320_1; // r8 eng_1 = eng_3; /*0xa789*/
 if ( !eng || !Realtek_USB_Ethernet_Controller || !a3 ) /*0xa7a4*/
 return 0x8000000000000002uLL; /*0xa7a4*/
 if ( !eng_3 ) /*0xa7ad*/
 return 0x8000000000000003uLL; /*0xa7b9*/
 if ( !*Realtek_USB_Ethernet_Controller ) /*0xa7be*/
 return 0x8000000000000002uLL; /*0xa951*/
 for ( i = *eng_3; ; i = *(_BYTE *)eng_1 ) /*0xa7c8*/
 {
 if ( !i ) /*0xa828*/
 return 0x8000000000000003uLL; /*0xa828*/
 if ( !a5 ) /*0xa7d1*/
 break; /*0xa7d1*/
 if ( RtkUsbUndiAsciiStrToUint64S(eng, eng_1, (__int64)a3, v5) ) /*0xa7d9*/
 goto LABEL_22; /*0xa7e0*/
 eng_1 = (_DWORD *)((char *)eng_1 + 3); /*0xa7e2*/
LABEL_19:
 ; /*0xa824*/
 }
 v13 = 0; /*0xa7e8*/
 while ( i && i != 59 ) /*0xa7ef*/
 i = *((_BYTE *)eng_1 + ++v13); /*0xa7f4*/
 if ( RtkUsbUndiUnicodeToAscii(eng_1, eng, v13, v5) ) /*0xa804*/
 {
 eng_1 = (_DWORD *)((char *)eng_1 + v13); /*0xa80e*/
 n59 = *(_BYTE *)eng_1; /*0xa811*/
 if ( !*(_BYTE *)eng_1 ) /*0xa815*/
 return 0x8000000000000003uLL; /*0xa815*/
 do /*0xa81e*/
 {
 if ( n59 != 59 ) /*0xa819*/
 break; /*0xa819*/
 eng_1 = (_DWORD *)((char *)eng_1 + 1); /*0xa81b*/
 n59 = *(_BYTE *)eng_1; /*0xa81e*/
 }
 while ( *(_BYTE *)eng_1 ); /*0xa81e*/
 goto LABEL_19; /*0xa822*/
 }
LABEL_22:
 v15 = *a3; /*0xa82c*/
 v16 = 0; /*0xa82f*/
 if ( !*a3 ) /*0xa82c*/
 goto LABEL_23; /*0xa835*/
LABEL_35:
 eng_2 = *v15; /*0xa8a4*/
 if ( !*v15 ) /*0xa8aa*/
 {
LABEL_23:
 v17 = (char **)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, 16 * (v16 + 2)); /*0xa837*/
 v19 = v17; /*0xa844*/
 if ( v17 ) /*0xa84a*/
 {
 v24 = *a3; /*0xa8bd*/
 if ( *a3 ) /*0xa8bd*/
 {
 v18 = 16 *v16; /*0xa8c8*/
 if ( 16 *v16 ) /*0xa8c8*/
 RtkUsbUndiCopyMem(v17, v24, v18, v5); /*0xa8d4*/
 }
 v25 = RtkUsbUndiStrLen8(eng, (__int64)v24, v18, v5); /*0xa8dc*/
 v27 = RtkUsbUndiPrintChar2(Wrong_Interrupt_size_n_1, v25 + 1, (__int64)eng, v5); /*0xa8e8*/
 v30 = 2 *v16; /*0xa8ed*/
 v19[v30] = v27; /*0xa8f0*/
 if ( v27 ) /*0xa8f7*/
 {
 v31 = RtkUsbUndiStrLen16(Realtek_USB_Ethernet_Controller, n321, n320, v5); /*0xa909*/
 v33 = RtkUsbUndiPrintChar2(Wrong_Interrupt_size_n_2, 2 *v31 + 2, (__int64)Realtek_USB_Ethernet_Controller, v5); /*0xa919*/
 v19[v30 + 1] = v33; /*0xa91e*/
 if ( v33 ) /*0xa926*/
 {
 v19[v30 + 2] = 0; /*0xa933*/
 v19[v30 + 3] = 0; /*0xa938*/
 if ( *a3 ) /*0xa93d*/
 RtkUsbUndiPrintNewline((__int64)*a3, n321_1, n320_1, v5); /*0xa945*/
 *a3 = v19; /*0xa94a*/
 return 0; /*0xa94f*/
 }
 RtkUsbUndiPrintNewline((__int64)v19[v30], n321_1, n320_1, v5); /*0xa92c*/
 }
 RtkUsbUndiPrintNewline((__int64)v19, n321, n320, v5); /*0xa8fc*/
 }
 return 0x8000000000000009uLL; /*0xa856*/
 }
 while ( 1 ) /*0xa897*/
 {
 n59_1 = *eng_2; /*0xa897*/
 if ( !*eng_2 ) /*0xa897*/
 {
LABEL_34:
 v15 += 2; /*0xa89d*/
 ++v16; /*0xa8a1*/
 goto LABEL_35; /*0xa8a1*/
 }
 v20 = 0; /*0xa85b*/
 while ( n59_1 && n59_1 != 59 ) /*0xa862*/
 n59_1 = eng_2[++v20]; /*0xa867*/
 if ( !RtkUsbUndiUnicodeToAscii(eng, eng_2, v20, v5) ) /*0xa877*/
 return 0x8000000000000014uLL; /*0xa96a*/
 eng_2 += v20; /*0xa881*/
 n59_2 = *eng_2; /*0xa884*/
 if ( !*eng_2 ) /*0xa888*/
 goto LABEL_34; /*0xa888*/
 do /*0xa891*/
 {
 if ( n59_2 != 59 ) /*0xa88c*/
 break; /*0xa88c*/
 n59_2 = *++eng_2; /*0xa891*/
 }
 while ( *eng_2 ); /*0xa891*/
 }
}

// RtkUsbUndiAsciiStrHexToUint64 @ 0xa978 unsigned __int64 RtkUsbUndiAsciiStrHexToUint64(
 __int16 *Wrong_Interrupt_size_n,
 __int64 a2,
 unsigned __int16 **va,
 double a4)
{
 __int64 v7; // rdx char *Realtek_USB_Ethernet_Controller; // rdi unsigned __int64 v9; // rax __int64 n321; // rdx __int64 n320; // r8 unsigned __int64 v12; // rbx if ( !Wrong_Interrupt_size_n ) /*0xa9a0*/
 RtkUsbUndiAssert( /*0xa9b3*/
 (__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
 67,
 (__int64)MEMORY[0xD640], // "Format != ((void *) 0)"
 a4);
 if ( ((unsigned __int8)Wrong_Interrupt_size_n & 1) != 0 ) /*0xa9bb*/
 RtkUsbUndiAssert( /*0xa9d0*/
 (__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
 68,
 (__int64)MEMORY[0xDB30], // "((UINTN) Format & 0x00000001) == 0"
 a4);
 if ( !a2 ) /*0xa9d8*/
 RtkUsbUndiAssert( /*0xa9eb*/
 (__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
 69,
 (__int64)MEMORY[0xDB58], // "Console != ((void *) 0)"
 a4);
 Realtek_USB_Ethernet_Controller = (char *)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, 642); /*0xa9fa*/
 if ( !Realtek_USB_Ethernet_Controller ) /*0xaa00*/
 RtkUsbUndiAssert( /*0xaa13*/
 (__int64)MEMORY[0xDAF8], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiLib\\UefiLibPrint.c"
 74,
 (__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
 a4);
 v9 = RtkUsbUndiPrintChar(Realtek_USB_Ethernet_Controller, v7, (unsigned __int8 *)Wrong_Interrupt_size_n, va); /*0xaa21*/
 v12 = v9; /*0xaa26*/
 if ( a2 && v9 && (*(__int64 ( **)(__int64, char *))(a2 + 8))(a2, Realtek_USB_Ethernet_Controller) < 0 ) /*0xaa3f*/
 v12 = 0; /*0xaa3f*/
 RtkUsbUndiPrintNewline((__int64)Realtek_USB_Ethernet_Controller, n321, n320, a4); /*0xaa46*/
 return v12; /*0xaa62*/
}

// RtkUsbUndiSerialPrint @ 0xaa6c __int64 RtkUsbUndiSerialPrint(__int16 *Wrong_Interrupt_size_n, ...)
{
 double Size; // xmm3_8 va_list va; // [rsp+38h] [rbp+10h] BYREF va_start(va, Wrong_Interrupt_size_n);
 return RtkUsbUndiAsciiStrHexToUint64(Wrong_Interrupt_size_n, *(_QWORD *)(qword_E2F0 + 64), (__int64)va, Size); /*0xaa97*/
}

// RtkUsbUndiPrintChar @ 0xaa9c unsigned __int64 RtkUsbUndiPrintChar(
 char *Realtek_USB_Ethernet_Controller,
 __int64 a2,
 unsigned __int8 *Wrong_Interrupt_size_n,
 unsigned __int16 **va)
{
 double v4; // xmm3_8 if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller & 1) != 0 ) /*0xaab7*/
 RtkUsbUndiAssert( /*0xaacc*/
 (__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
 71,
 (__int64)MEMORY[0xDB70], // "(((UINTN) (StartOfBuffer)) & 0x01) == 0"
 v4);
 if ( ((unsigned __int8)Wrong_Interrupt_size_n & 1) != 0 ) /*0xaad4*/
 RtkUsbUndiAssert( /*0xaae9*/
 (__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
 72,
 (__int64)MEMORY[0xDBD0], // "(((UINTN) (FormatString)) & 0x01) == 0"
 v4);
 return RtkUsbUndiPrintFormatted(Realtek_USB_Ethernet_Controller, 321, 320, Wrong_Interrupt_size_n, va); /*0xab11*/
}

// RtkUsbUndiPrintString @ 0xab18 unsigned __int64 RtkUsbUndiPrintString(
 char *Realtek_USB_Ethernet_Controller,
 unsigned __int64 n256,
 char *_nASSERT_EFI_ERROR_(Status___%r)_n,
 unsigned __int16 **va)
{
 double v4; // xmm3_8 if ( ((unsigned __int8)Realtek_USB_Ethernet_Controller & 1) != 0 ) /*0xab3b*/
 RtkUsbUndiAssert( /*0xab50*/
 (__int64)MEMORY[0xDB98], // "f:\\uefi\\edk2\\MdePkg\\Library\\BasePrintLib\\PrintLib.c"
 218,
 (__int64)MEMORY[0xDB70], // "(((UINTN) (StartOfBuffer)) & 0x01) == 0"
 v4);
 return RtkUsbUndiPrintFormatted( /*0xab80*/
 Realtek_USB_Ethernet_Controller,
 n256 >> 1,
 64,
 (unsigned __int8 *)_nASSERT_EFI_ERROR_(Status___%r)_n,
 va);
}

// RtkUsbUndiSPrint @ 0xab88 unsigned __int64 RtkUsbUndiSPrint(
 char *Realtek_USB_Ethernet_Controller,
 unsigned __int64 n512,
 char *ASSERT_[%a]_%a(%d):_%a_n,
 ...)
{
 va_list va; // [rsp+48h] [rbp+20h] BYREF va_start(va, ASSERT_[%a]_%a(%d):_%a_n);
 return RtkUsbUndiPrintString(Realtek_USB_Ethernet_Controller, n512, ASSERT_[%a]_%a(%d):_%a_n, (unsigned __int16 **)va); /*0xaba0*/
}

// RtkUsbUndiPrintHelper1 @ 0xaba8 _BYTE *RtkUsbUndiPrintHelper1(
 _BYTE *Realtek_USB_Ethernet_Controller,
 unsigned __int64 Realtek_USB_Ethernet_Controller_1,
 __int64 i,
 __int16 n32,
 __int64 a5)
{
 __int64 j; // r10 for ( j = 0; j < i; ++j ) /*0xabae*/
 {
 if ( (unsigned __int64)Realtek_USB_Ethernet_Controller >= Realtek_USB_Ethernet_Controller_1 ) /*0xabb3*/
 break; /*0xabb3*/
 *Realtek_USB_Ethernet_Controller = n32; /*0xabbb*/
 if ( a5 != 1 ) /*0xabbe*/
 Realtek_USB_Ethernet_Controller[1] = HIBYTE(n32); /*0xabc7*/
 Realtek_USB_Ethernet_Controller += a5; /*0xabca*/
 }
 return Realtek_USB_Ethernet_Controller; /*0xabda*/
}

// RtkUsbUndiPrintHelper2 @ 0xabdc _BYTE *RtkUsbUndiPrintHelper2(_BYTE *_r_n, unsigned __int64 a2, unsigned int n16, double a4)
{
 _BYTE *_r_n_1; // rbx unsigned __int64 n16_1; // rbp unsigned __int64 v8; // rtt _r_n_1 = _r_n; /*0xabf6*/
 *_r_n = 0; /*0xabf9*/
 n16_1 = n16; /*0xabfc*/
 do /*0xac38*/
 {
 if ( !n16 ) /*0xac01*/
 RtkUsbUndiAssert( /*0xac14*/
 (__int64)MEMORY[0xE1F8], // "f:\\uefi\\edk2\\MdePkg\\Library\\BaseLib\\DivU64x32Remainder.c"
 47,
 (__int64)MEMORY[0xD630], // "Divisor != 0"
 a4);
 ++_r_n_1; /*0xac1e*/
 v8 = a2; /*0xac21*/
 a2 /= n16_1; /*0xac2b*/
 *_r_n_1 = byte_E080[(unsigned int)(v8 % n16_1)]; /*0xac33*/
 }
 while ( a2 ); /*0xac38*/
 return _r_n_1; /*0xac4c*/
}

// RtkUsbUndiPrintFormatted @ 0xac54 unsigned __int64 RtkUsbUndiPrintFormatted(
 char *Realtek_USB_Ethernet_Controller,
 __int64 n321,
 __int64 n320,
 unsigned __int8 *_nASSERT_EFI_ERROR_(Status___%r)_n,
 unsigned __int16 **va)
{
 double v5; // xmm3_8 unsigned __int8 *_nASSERT_EFI_ERROR_(Status___%r)_n_2; // rdi __int64 v7; // r14 char *Realtek_USB_Ethernet_Controller_1; // r15 char *Realtek_USB_Ethernet_Controllera_1; // r12 unsigned int v12; // r13d __int64 n2; // r8 __int64 n0xFFFF; // r10 int v15; // eax unsigned __int64 n10; // rcx unsigned __int64 v17; // r9 char v18; // r11 unsigned __int16 *v19; // r12 char *_r_n_1; // rbx unsigned __int16 **va_1; // rdx unsigned __int64 n13_1; // rcx unsigned __int16 *v23; // rbx unsigned __int64 v24; // rcx unsigned __int64 v25; // rcx unsigned __int64 v26; // rcx unsigned __int64 v27; // rcx unsigned __int64 v28; // rcx unsigned __int64 v29; // rcx unsigned __int8 *_nASSERT_EFI_ERROR_(S... [31015 chars total]

// RtkUsbUndiPrintUint64 @ 0xb9d0 unsigned __int64 RtkUsbUndiPrintUint64(char *_r_n, __int64 n38, __int64 n320, char *%02d_%02d_%04d__%02d:%02d, ...)
{
 va_list va; // [rsp+60h] [rbp+28h] BYREF va_start(va, %02d_%02d_%04d__%02d:%02d);
 return RtkUsbUndiPrintFormatted( /*0xb9ed*/
 _r_n,
 n38,
 n320,
 (unsigned __int8 *)%02d_%02d_%04d__%02d:%02d,
 (unsigned __int16 **)va);
}

// RtkUsbUndiPrintHex64 @ 0xb9f4 __int64 RtkUsbUndiPrintHex64(__int16 *Wrong_Interrupt_size_n, __int64 n642)
{
 __int64 v2; // rax __int64 Result; // rcx __int64 v5; // [rsp+40h] [rbp+18h] BYREF v2 = (*(__int64 ( **)(__int64, __int64, __int64 *))(qword_E2F8 + 64))(4, n642, &v5); /*0xba09*/
 Result = v5; /*0xba0c*/
 if ( v2 < 0 ) /*0xba16*/
 return 0; /*0xba16*/
 return Result; /*0xba1d*/
}

// RtkUsbUndiPrintChar2 @ 0xba24 _BYTE *RtkUsbUndiPrintChar2(__int16 *Wrong_Interrupt_size_n, unsigned __int64 n642, __int64 eng, double a4)
{
 _BYTE *result; // rax if ( !eng ) /*0xba37*/
 RtkUsbUndiAssert( /*0xba4c*/
 (__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
 569,
 (__int64)MEMORY[0xD6B0], // "Buffer != ((void *) 0)"
 a4);
 if ( n642 > -eng ) /*0xba5a*/
 RtkUsbUndiAssert( /*0xba6f*/
 (__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
 570,
 (__int64)MEMORY[0xE290], // "AllocationSize <= (0xFFFFFFFFFFFFFFFFULL - (UINTN) Buffer + 1)"
 a4);
 result = (_BYTE *)RtkUsbUndiPrintHex64(Wrong_Interrupt_size_n, n642); /*0xba77*/
 if ( result ) /*0xba7f*/
 {
 if ( n642 ) /*0xba84*/
 return RtkUsbUndiCopyMem(result, (_BYTE *)eng, n642, a4); /*0xba8f*/
 }
 return result; /*0xba99*/
}

// RtkUsbUndiPrintNewline @ 0xbaa0 void RtkUsbUndiPrintNewline(char *Realtek_USB_Ethernet_Controller, __int64 n321, __int64 n320, double a4)
{
 __int64 v4; // rax v4 = (*(__int64 ( **)(char *, __int64, __int64))(qword_E2F8 + 72))( /*0xbaab*/
 Realtek_USB_Ethernet_Controller,
 n321,
 n320);
 if ( v4 < 0 ) /*0xbab1*/
 {
 RtkUsbUndiDebugPrint( /*0xbac2*/
 0x80000000,
 nASSERT_EFI_ERROR__Status____r__n, // "\nASSERT_EFI_ERROR (Status = %r)\n"
 v4);
 RtkUsbUndiAssert( /*0xbada*/
 (__int64)MEMORY[0xE240], // "f:\\uefi\\edk2\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c"
 819,
 (__int64)aEfiErrorStatus, // "!EFI_ERROR (Status)"
 a4);
 }
}