anchor.diff:  
       function ClaimExists(const AClaimName: string): Boolean;
       function GetAudienceArray: TArray<string>;
  -    procedure SetAudienceArray(const Value: TArray<string>);
  +    procedure SetAudienceArray(const AValue: TArray<string>);
     public
       constructor Create; virtual;
       procedure SetClaimOfType<T>(const AName: string; const AValue: T);
  
positive.code:   end;
  
    if (Length(LAudienceArray) = 1) then
      TJSONUtils.SetJSONValueFrom<string>(TReservedClaimNames.AUDIENCE, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetAudienceArray(const Value: TArray<string>);
  begin
    Audience := string.Join(AUDIENCE_SEPARATOR, Value);
  end;
  
  procedure TJWTClaims.SetExpiration(Value: TDateTime);
  begin
    if Value = 0 then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.EXPIRATION, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<TDateTime>(TReservedClaimNames.EXPIRATION, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetIssuedAt(Value: TDateTime);
  begin
    if Value = 0 then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.ISSUED_AT, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<TDateTime>(TReservedClaimNames.ISSUED_AT, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetIssuer(Value: string);
  begin
    if Value = '' then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.ISSUER, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<string>(TReservedClaimNames.ISSUER, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetJWTId(Value: string);
  begin
    if Value = '' then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.JWT_ID, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<string>(TReservedClaimNames.JWT_ID, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetNotBefore(Value: TDateTime);
  begin
    if Value = 0 then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.NOT_BEFORE, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<TDateTime>(TReservedClaimNames.NOT_BEFORE, Value, FJSON);
  end;
  
  procedure TJWTClaims.SetSubject(Value: string);
  begin
    if Value = '' then
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.SUBJECT, FJSON)
    else
      TJSONUtils.SetJSONValueFrom<string>(TReservedClaimNames.SUBJECT, Value, FJSON);
  end;
  
  { TJWTHeader }
  
negative.code:   Result := TJSONUtils.GetJSONValue(TReservedClaimNames.SUBJECT, FJSON).AsString;
  end;
  
  procedure TJWTClaims.SetAudience(const AValue: string);
  var
    LAudienceArray: TArray<string>;
    LAudience: string;
    LArray: TJSONArray;
  begin
    if AValue.IsEmpty then
    begin
      TJSONUtils.RemoveJSONNode(TReservedClaimNames.AUDIENCE, FJSON);
      Exit;
    end;
  
    LAudienceArray := AValue.Split([AUDIENCE_SEPARATOR]);
  
    if Length(LAudienceArray) > 1 then
    begin
  