anchor.diff:  {$ELSE}
     DStringW = WideString;
   {$ENDIF UNICODE}
  +  DCharW = WideChar;
  +  PDCharW = PWideChar;
     PDStringW = ^DStringW;
   
  -  {$IF RTLVersion<25}
  +  // XE5
  +  {$IF CompilerVersion<26}
     IntPtr=Integer;
     {$IFEND IntPtr}
   
  
positive.code:     vdtStream:
        begin
          SetLength(lvHexStr, TMemoryStream(ADValue.Value.AsStream).Size * 2);
          BinToHex(
            TMemoryStream(ADValue.Value.AsStream).Memory,
            PChar(lvHexStr),
            TMemoryStream(ADValue.Value.AsStream).Size);
  
          Result := lvHexStr;
        end;
  
negative.code:   QValueTypeName: array [TDValueDataType] of String = ('Unassigned', 'NULL',
      'Boolean', 'Single', 'Float', 'Integer', 'Int64', 'Currency', 'Guid',
      'DateTime', 'String', 'Stream', 'Array');
  
  
  function BinToHex(p: Pointer; l: Integer; ALowerCase: Boolean): DStringW;
  const
    B2HConvert: array [0 .. 15] of DCharW = ('0', '1', '2', '3', '4', '5', '6',
      '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
    B2HConvertL: array [0 .. 15] of DCharW = ('0', '1', '2', '3', '4', '5', '6',
      '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
  var
    pd: PDCharW;
    pb: PByte;
  begin
    SetLength(Result, l shl 1);
    pd := PDCharW(Result);
    pb := p;
    if ALowerCase then
    begin
      while l > 0 do
      begin
        pd^ := B2HConvertL[pb^ shr 4];
        Inc(pd);
        pd^ := B2HConvertL[pb^ and $0F];
        Inc(pd);
        Inc(pb);
        Dec(l);
      end;
    end
    else
    begin
      while l > 0 do
      begin
        pd^ := B2HConvert[pb^ shr 4];
        Inc(pd);
        pd^ := B2HConvert[pb^ and $0F];
        Inc(pd);
        Inc(pb);
        Dec(l);
      end;
    end;
  end;
  
  function BinToHex(const ABytes: TBytes; ALowerCase: Boolean): DStringW;
  begin
    Result := BinToHex(@ABytes[0], Length(ABytes), ALowerCase);
  end;
  
  function GetDValueSize(ADValue: PDValueRecord): Integer;
  var
  