anchor.diff:      function GetJWTId: string;
       function GetNotBefore: TDateTime;
       function GetSubject: string;
  -    procedure SetAudience(Value: string);
  -    procedure SetExpiration(Value: TDateTime);
  -    procedure SetIssuedAt(Value: TDateTime);
  -    procedure SetIssuer(Value: string);
  -    procedure SetJWTId(Value: string);
  -    procedure SetNotBefore(Value: TDateTime);
  -    procedure SetSubject(Value: string);
  +    procedure SetAudience(const AValue: string);
  +    procedure SetExpiration(AValue: TDateTime);
  +    procedure SetIssuedAt(AValue: TDateTime);
  +    procedure SetIssuer(const AValue: string);
  +    procedure SetJWTId(const AValue: string);
  +    procedure SetNotBefore(AValue: TDateTime);
  +    procedure SetSubject(const AValue: string);
   
       function GetHasAudience: Boolean;
       function GetHasExpiration: Boolean;
  
positive.code: 
      function ClaimExists(const AClaimName: string): Boolean;
      function GetAudienceArray: TArray<string>;
      procedure SetAudienceArray(const Value: TArray<string>);
    public
      constructor Create; virtual;
      procedure SetClaimOfType<T>(const AName: string; const AValue: T);
  
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
  