anchor.diff:      Result:= AppDir_Home+Copy(Result, 3, MaxInt);
   end;
   
  +function AppVariantNil: TAppVariant;
  +begin
  +  FillChar(Result, SizeOf(Result), 0);
  +  Result.Typ:= avrNil;
  +end;
  +
   function AppVariant(Value: boolean): TAppVariant;
   begin
  +  FillChar(Result, SizeOf(Result), 0);
     Result.Typ:= avrBool;
     Result.Bool:= Value;
   end;
   
   function AppVariant(const Value: Int64): TAppVariant;
   begin
  +  FillChar(Result, SizeOf(Result), 0);
     Result.Typ:= avrInt;
     Result.Int:= Value;
   end;
   
   function AppVariant(const Value: string): TAppVariant;
   begin
  +  FillChar(Result, SizeOf(Result), 0);
     Result.Typ:= avrStr;
     Result.Str:= Value;
   end;
   
   function AppVariant(const Value: TRect): TAppVariant;
   begin
  -  Result.Typ:= avrRect;
  -  Result.Rect:= Value
  +  FillChar(Result, SizeOf(Result), 0);
  +  Result.Typ:= avrTupleInt;
  +  Result.TupleLen:= 4;
  +  Result.TupleItems[0]:= Value.Left;
  +  Result.TupleItems[1]:= Value.Top;
  +  Result.TupleItems[2]:= Value.Right;
  +  Result.TupleItems[3]:= Value.Bottom;
  +end;
  +
  +function AppVariant(const Value: array of integer): TAppVariant;
  +var
  +  i: integer;
  +begin
  +  FillChar(Result, SizeOf(Result), 0);
  +  Result.Typ:= avrTupleInt;
  +  Result.TupleLen:= Length(Value);
  +  for i:= 0 to Min(Length(Value), Length(Result.TupleItems))-1 do
  +    Result.TupleItems[i]:= Value[i];
   end;
   
   
  
positive.code:         else
            Result:= 'False';
        end;
      avrRect:
        Result:= Format('(%d,%d,%d,%d)', [V.Rect.Left, V.Rect.Top, V.Rect.Right, V.Rect.Bottom]);
    end;
  end;
  
  
negative.code:   end;
  end;
  
  function AppVariantToString(const V: TAppVariant): string;
  begin
    case V.Typ of
  