Normalization__Normalize

__int64 __fastcall Normalization__Normalize(__int64 a1, __int64 a2, int a3, __int64 a4, unsigned int a5, _DWORD *a6){
  __int64 v7; 
  unsigned int v10; 
  unsigned int v11; 
  INT64 v12; 
  UINT8 v13; 
  unsigned int v14; 
  __int64 v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 
  INT64 result; 
  __int64 v22; 
  __int64 v23; 
  __int64 v24; 
  __int64 v25; 
  __int64 v26; 
  unsigned int v27; 
  int v28; 
  int v29; 
  __int64 v30; 
  __int16 v31; 
  __int64 v32; 
  int v33; 
  __int16 v34; 
  __int64 v35; 
  v7 = a3;
  memset((INT64)&result, 0i64);
  if( !a2 || !a4 || !a6 )
    return 3221225485i64;
  v29 = 0;
  v31 = 0;
  v33 = 0;
  v34 = 0;
  *a6 = 0;
  v22 = a2 + 2 * v7;
  v10 = 0;
  v27 = a5;
  result = a2;
  v30 = a4 - 2;
  v28 = v7;
  v24 = a4;
  v25 = a4 + 2i64 * (int)a5;
  v26 = a4;
  v23 = a2;
  v32 = a4;
  v35 = a1;
  while( a2 != v22 )
  {
    if( v10 )
      goto LABEL_17;
    v11 = *(unsigned __int16 *)a2;
    v12 = *(unsigned __int16 *)a2;
    v23 = a2 + 2;
    if( (signed int)v11 < *(_DWORD *)(a1 + 28)
      || (v13 = *(_BYTE *)(((unsigned __int64)v11 >> 7) + *(_QWORD *)(a1 + 32))) == 0
      || v13 == 0xFB && *(_BYTE *)(a1 + 113) )
    {
      if( !NormBuffer__Append((INT64)&result, v12) )
      {
        a2 = v23;
        v10 = -1073741789;
        break;
      }
    }
    else
    {
      v10 = Normalization__NormalizeCharacter(a1, v12, v13, (INT64)&result);
    }
    a2 = v23;
  }
  if( !v10 )
  {
    a2 = (v26 - v24) >> 1;
    goto LABEL_24;
  }
LABEL_17:
  if( v10 == -1073741789 )
  {
    v14 = ((v22 - a2) >> 1) + 1;
    v15 = (a2 - result) >> 1;
    if( !(_DWORD)v15 )
      LODWORD(v15) = 1;
    v16 = Normalization__GuessCharCountBySize(a1, v14);
    v19 = v18 * v17 / (int)v15;
    if( v19 <= v16 )
      v19 = v16;
    LODWORD(a2) = v17 + v19 + (v19 >> 3);
  }
  else
  {
    LODWORD(a2) = ((a2 - result) >> 1) - 1;
  }
LABEL_24:
  *a6 = a2;
  return v10;
}

Referenced by:

RtlpNormalizeStringWorker