RtlIpv6AddressToStringA

INT8 *__stdcall RtlIpv6AddressToStringA(in6_addr *Addr, INT8 *S){
  unsigned int v2; 
  INT8 *v3; 
  INT8 *v4; 
  int v6; 
  int v7; 
  int v8; 
  int v9; 
  __int64 i; 
  int v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  int v16; 
  __int64 v17; 
  int v18; 
  __int64 v19; 
  __int64 v20; 
  int v21; 
  USHORT v23; 
  USHORT v24; 
  int v25; 
  const char *v26; 
  int v27; 

  v2 = 8;
  v3 = S + 46;
  v4 = S;
  if( *(_DWORD *)Addr->u.Byte || Addr->u.Word[2] || Addr->u.Word[3] || !Addr->u.Word[6] )
    goto LABEL_5;
  v23 = Addr->u.Word[4];
  if( v23 )
  {
    if( v23 == 0xFFFF && !Addr->u.Word[5] )
    {
      v27 = sprintf_s(
              S,
              0x2Eui64,
              (INT8 *)"::ffff:0:%u.%u.%u.%u",
              Addr->u.Byte[12],
              Addr->u.Byte[13],
              Addr->u.Byte[14],
              Addr->u.Byte[15]);
      return &v4[v27];
    }
  }
  else
  {
    v24 = Addr->u.Word[5];
    if( ((v24 + 1) & 0xFFFE) == 0 )
    {
      v25 = Addr->u.Byte[14];
      v26 = &File;
      if( v24 )
        v26 = "ffff:";
      v27 = sprintf_s(
              v4,
              v3 - v4,
              (INT8 *)"::%hs%u.%u.%u.%u",
              v26,
              Addr->u.Byte[12],
              Addr->u.Byte[13],
              v25,
              Addr->u.Byte[15]);
      return &v4[v27];
    }
  }
LABEL_5:
  v6 = 0;
  v7 = 0;
  v8 = 0;
  if( (Addr->u.Word[4] & 0xFFFD) == 0 && Addr->u.Word[5] == 0xFE5E )
    v2 = 6;
  v9 = 0;
  for( i = 0i64; i < v2; ++i )
  {
    v11 = v9 + 1;
    if( Addr->u.Word[i] )
    {
      v8 = v9 + 1;
    }
    else
    {
      v12 = v6 - v7;
      v13 = v9 - v8 + 1;
      v14 = v8;
      if( v13 <= v6 - v7 )
        v14 = v7;
      v7 = v14;
      v15 = v11;
      if( v13 <= v12 )
        v15 = v6;
      v6 = v15;
    }
    v9 = v11;
  }
  v16 = 0;
  if( v6 - v7 > 1 )
    v16 = v6;
  v17 = v16;
  v18 = 0;
  if( v6 - v7 > 1 )
    v18 = v7;
  v19 = 0i64;
  v20 = v18;
  do
  {
    if( v19 >= v17 || v20 > v19 )
    {
      if( v19 && v19 != v17 )
        v4 += (int)sprintf_s(v4, v3 - v4, (INT8 *)":");
      v21 = sprintf_s(v4, v3 - v4, (INT8 *)"%x", (unsigned __int16)__ROR2__(Addr->u.Word[v19], 8));
    }
    else
    {
      v21 = sprintf_s(v4, v3 - v4, (INT8 *)"::");
      v19 = v17 - 1;
    }
    ++v19;
    v4 += v21;
  }
  while( v19 < v2 );
  if( v2 < 8 )
    v4 += (int)sprintf_s(
                 v4,
                 v3 - v4,
                 (INT8 *)":%u.%u.%u.%u",
                 Addr->u.Byte[12],
                 Addr->u.Byte[13],
                 Addr->u.Byte[14],
                 Addr->u.Byte[15]);
  return v4;
}

Referenced by:

RtlIpv6AddressToStringExA