anchor.diff:    if not SkipEmptyItem or (Str <> '') then Result.Add(Str);
   end;
   
  +
  +function TAbstractList.Remove(const Value: Variant): Integer;
  +begin
  +  Result := IndexOf(Value);
  +  if Result >= 0 then Delete(Result);
  +end;
  +
  +function TAbstractList.Remove(const Value: Variant; Direction: TDirection
  +  ): Integer;
  +begin
  +  if Direction = TDirection.FromBeginning then
  +    Result := IndexOf(Value)
  +  else
  +    Result := LastIndexOf(Value);
  +  if Result >= 0 then Delete(Result);
  +end;
  +
   function TAbstractList.First: Variant;
   begin
     Result := Get(0);
  
positive.code:     procedure InsertRange(Index: Integer; const Container: Variant); overload; override;
      procedure InsertRange(Index: Integer; const ConstArray: array of const); overload; override;
      procedure Move(CurIndex, NewIndex: Integer); override;
      function Remove(const Value: Variant): Integer; override;
      function ToArray: TVariants; overload; override;
      function ToArray(VarType: TVarType): Variant; overload; override;
      property Item[Index: Integer]: Variant read Get write Put; default;
  
negative.code:   EHproseException = class(Exception);
    EHashBucketError = class(Exception);
    EArrayListError = class(Exception);
  
    TDirection = (FromBeginning, FromEnd);
  
    IHproseFilter = interface
    ['{4AD7CCF2-1121-4CA4-92A7-5704C5956BA4}']
  