SdbpSearchDB

__int64 __fastcall SdbpSearchDB(__int64 a1, void *a2, __int64 a3, __int64 a4, _DWORD *a5, int a6){
  _DWORD *v6; 
  unsigned int v9; 
  WCHAR *Str1; 
  INT64 v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned int FirstStringIndexedTag; 
  unsigned int v16; 
  INT64 v17; 
  int v19; 
  unsigned int v20; 
  unsigned int i; 
  int v22; 
  unsigned int FirstTag; 
  UINT64 v24; 
  __int64 v25; 
  unsigned int FirstNamedTag; 
  int v27; 
  unsigned int v28; 
  unsigned int j; 
  int v30; 
  wchar_t *a4a; 
  INT64 a5a[2]; 
  __int128 v33; 
  __int64 v34; 
  int v36; 
  __int64 v37; 
  v6 = a5;
  LODWORD(v37) = 0;
  a6 = 0;
  v34 = 0i64;
  v9 = 0;
  v36 = 0;
  *(_OWORD *)a5a = 0i64;
  v33 = 0i64;
  memset((INT64)a5, 0i64);
  Str1 = *(WCHAR **)(a4 + 40);
  a4a = Str1;
  v13 = 16i64;
  if( (unsigned int)SdbGetIndex(a2, 28679, 24587, 0i64) )
  {
    for( i = SdbpFindFirstIndexedWildCardTag((RTL_RUN_ONCE *)a2, 28679, v12, (INT64)Str1, (INT64)a5a);
          i;
          i = SdbpFindNextIndexedWildCardTag(a2, (__int64)a5a) )
    {
      v22 = SdbpCheckExe(a1, (__int64)a2, i, (unsigned int *)&v36, a4, 1, (__int64)&v37, v6);
      v9 = v36;
      if( v22 )
      {
        if( (_DWORD)v37 != 2 )
          goto LABEL_7;
      }
      else if( (unsigned int)v36 > 0x10 )
      {
        goto LABEL_15;
      }
    }
  }
  if( (unsigned int)SdbGetIndex(a2, 28679, 24577, 0i64) )
  {
    v14 = 1i64;
    FirstStringIndexedTag = SdbFindFirstStringIndexedTag((RTL_RUN_ONCE *)a2, 28679, 24577, Str1, (INT64)a5a);
    goto LABEL_4;
  }
  v14 = 0i64;
  FirstTag = SdbFindFirstTag((INT64)a2, 0i64, 28673);
  a6 = FirstTag;
  if( !FirstTag )
  {
    v24 = 3472i64;
LABEL_30:
    AslLogCallPrintf(1ui64, "SdbpSearchDB", v24, "No DATABASE tag found");
    goto LABEL_7;
  }
  FirstStringIndexedTag = SdbFindFirstNamedTag(a2, FirstTag, 28679, 24577, Str1);
LABEL_4:
  while( 1 )
  {
    v16 = FirstStringIndexedTag;
    if( !FirstStringIndexedTag )
      break;
    v19 = SdbpCheckExe(a1, (__int64)a2, FirstStringIndexedTag, (unsigned int *)&v36, a4, 0, (__int64)&v37, v6);
    v9 = v36;
    if( v19 )
    {
      if( (_DWORD)v37 != 2 )
        goto LABEL_7;
    }
    else if( (unsigned int)v36 > 0x10 )
    {
      goto LABEL_15;
    }
    if( v14 )
      FirstStringIndexedTag = SdbFindNextStringIndexedTag(a2, (unsigned int *)a5a);
    else
      FirstStringIndexedTag = SdbpFindNextNamedTag(a2, a6, v16, 24577, a4a);
  }
  if( *(_QWORD *)(a4 + 48) )
  {
    if( (unsigned int)SdbGetIndex(a2, 28679, 24608, 0i64) )
    {
      v25 = 1i64;
      FirstNamedTag = SdbFindFirstStringIndexedTag((RTL_RUN_ONCE *)a2, 28679, 24608, *(WCHAR **)(a4 + 48), (INT64)a5a);
      goto LABEL_44;
    }
    v25 = 0i64;
    a6 = SdbFindFirstTag((INT64)a2, 0i64, 28673);
    if( a6 )
    {
      v24 = 3544i64;
      goto LABEL_30;
    }
    FirstNamedTag = SdbFindFirstNamedTag(a2, 0i64, 28679, 24608, *(wchar_t **)(a4 + 48));
LABEL_44:
    while( 1 )
    {
      v28 = FirstNamedTag;
      if( !FirstNamedTag )
        break;
      v27 = SdbpCheckExe(a1, (__int64)a2, FirstNamedTag, (unsigned int *)&v36, a4, 0, (__int64)&v37, v6);
      v9 = v36;
      if( v27 )
      {
        if( (_DWORD)v37 != 2 )
          goto LABEL_7;
      }
      else if( (unsigned int)v36 > 0x10 )
      {
        goto LABEL_15;
      }
      if( v25 )
        FirstNamedTag = SdbFindNextStringIndexedTag(a2, (unsigned int *)a5a);
      else
        FirstNamedTag = SdbpFindNextNamedTag(a2, a6, v28, 24608, *(wchar_t **)(a4 + 48));
    }
  }
  if( (unsigned int)SdbGetIndex(a2, 28679, 24587, 0i64) )
  {
    for( j = SdbpFindFirstIndexedWildCardTag((RTL_RUN_ONCE *)a2, 28679, v17, (INT64)a4a, (INT64)a5a);
          j;
          j = SdbpFindNextIndexedWildCardTag(a2, (__int64)a5a) )
    {
      v30 = SdbpCheckExe(a1, (__int64)a2, j, (unsigned int *)&v36, a4, 2, (__int64)&v37, v6);
      v9 = v36;
      if( v30 )
      {
        if( (_DWORD)v37 != 2 )
          break;
      }
      else if( (unsigned int)v36 > 0x10 )
      {
        goto LABEL_15;
      }
    }
  }
LABEL_7:
  if( v9 > 0x10 || (v13 = v9) != 0 )
  {
    do
    {
LABEL_15:
      v20 = SdbFindFirstTag((INT64)a2, (unsigned int)*v6, 24582);
      if( v20 )
        SdbGetStringTagPtr((RTL_RUN_ONCE *)a2, v20);
      v6 += 2;
      --v13;
    }
    while( v13 );
  }
  return v9;
}

Referenced by:

SdbGetDatabaseMatch