I tried to carry compile the foowing code:
string stSubjAbbreviation = q9.getStringField(0);
vector<vector<string>> vSubClassSubjScore;
copy_if(vClassSubjScores.begin(), vClassSubjScores.end(), back_inserter(vSubClassSubjScore),
[stSubjAbbreviation](vector<string> &vStudentSubjScore)
{
return (vStudentSubjScore[1] == stSubjAbbreviation);
});
sort(vSubClassSubjScore.begin(), vSubClassSubjScore.end(),
[](vector<string>& vStudentSubjScore, vector<string>& vStudentSubjScore1)
{
return (stoi(vStudentSubjScore[2]) < stoi(vStudentSubjScore[2]));
});
for (int i = 0; i < classResult.size(); i++)
{
int iHighest = 0;
int iLowest = 0;
int iAverage = 0;
auto p = max_element(vSubClassSubjScore.begin(), vSubClassSubjScore.end(),
[](vector<string>& vStudentSubjScore, vector<string>& vStudentSubjScore1)
{
return (stoi(vStudentSubjScore[2]) < stoi(vStudentSubjScore[2]));
});
if (p != vSubClassSubjScore.end())
{
int j = distance(vSubClassSubjScore.begin(), p);
vector<string> vStudentSubjScore = vSubClassSubjScore[j];
string stHighest = vStudentSubjScore[2];
}
p = min_element(vSubClassSubjScore.begin(), vSubClassSubjScore.end(),
[](vector<string>& vStudentSubjScore, vector<string>& vStudentSubjScore1)
{
return (stoi(vStudentSubjScore[2]) < stoi(vStudentSubjScore[2]));
});
if (p != vSubClassSubjScore.end())
{
int j = distance(vSubClassSubjScore.begin(), p);
vector<string> vStudentSubjScore = vSubClassSubjScore[j];
string stLowest = vStudentSubjScore[2];
}
string stSurname = classResult[i].GetSurname();
string stFirstName = classResult[i].GetFirstName();
string stMiddleName = classResult[i].GetMiddleName();
string stName = CreateName(stSurname, stFirstName, stMiddleName);
string stPosition;
p = find(vSubClassSubjScore.begin(), vSubClassSubjScore.end(),
[stName](vector<string>& vStudentSubjScore)
{
return (vStudentSubjScore[0] == stName);
});
if (p != vSubClassSubjScore.end())
{
int iPosition = distance(vSubClassSubjScore.begin(), p);
stPosition = CreatePosition(iPosition++);
}
int iSum = 0;
for_each(vSubClassSubjScore.begin(), vSubClassSubjScore.end(),
[&iSum](vector<string>& vStudentSubjScore)
{
iSum += stoi(vStudentSubjScore[2]);
});
double dAverage = (double)iSum / (double)vTuple.size();
iAverage = Approximate(dAverage, 1);
vector<string> vectorNew;
vectorNew.push_back(to_string(iHighest));
vectorNew.push_back(to_string(iLowest));
vectorNew.push_back(to_string(iAverage));
vectorNew.push_back(stPosition);
auto q = find(classResult.begin(), classResult.end(),
[stName](StudentInfo& StudInfo)
{
return (StudInfo.GetName() == stName);
});
int iPos = distance(classResult.begin(), q);
map<string, vector<string>> mMap(map{ pair(stName, vectorNew) });
classResult[iPos].SetSubjectPermfomance(mMap);
}
but got the following compiation errors:
>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5740,21): error C2446: '==': no conversion from 'const _Ty' to 'std::vector<std::string,std::allocator<std::string>>'
1> with
1> [
1> _Ty=LoadResultBuffer::<lambda_5>
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5740,24): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5754,36): message : see reference to function template instantiation '_InIt std::_Find_unchecked<std::vector<std::string,std::allocator<std::string>>*,_Ty>(_InIt,const _InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=std::vector<std::string,std::allocator<std::string>> *,
1> _Ty=LoadResultBuffer::<lambda_5>
1> ]
1>C:\Users\HP\source\repos\ResultSheets\DBaseQuery.h(7204,10): message : see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,LoadResultBuffer::<lambda_5>>(_InIt,const _InIt,const LoadResultBuffer::<lambda_5> &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::vector<std::string,std::allocator<std::string>>>>>,
1> _Ty=std::vector<std::string,std::allocator<std::string>>
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5740,21): error C2446: '==': no conversion from 'const _Ty' to 'StudentInfo'
1> with
1> [
1> _Ty=LoadResultBuffer::<lambda_7>
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5740,24): message : No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5754,36): message : see reference to function template instantiation '_InIt std::_Find_unchecked<StudentInfo*,_Ty>(_InIt,const _InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=StudentInfo *,
1> _Ty=LoadResultBuffer::<lambda_7>
1> ]
1>C:\Users\HP\source\repos\ResultSheets\DBaseQuery.h(7231,15): message : see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>,LoadResultBuffer::<lambda_7>>(_InIt,const _InIt,const LoadResultBuffer::<lambda_7> &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<StudentInfo>>>,
1> _Ty=StudentInfo
1> ]
The surprising thing is that I had had a data structure of the type:
tuple<string,string,string,int>
that got the same error message.It compained that cost_Ty could notbe converted to tuple<string,string,int> which I had used as a part of this code segment but laterchanged its structure. Why can't algorithmn handle data sructures as state above.
The strcture of studentInfo is as shown below:
<pre>#include <string>
using namespace std;
class Address
{
string m_stStreet;
string m_stLocality;
string m_stCity;
string m_stState;
string m_stCountry;
public:
Address() = default;
Address(const Address& obj) = default;
Address(Address&& obj) = default;
Address& operator = (const Address& obj) = default;
Address& operator = (Address&& obj) = default;
bool operator == (const Address& obj);
bool operator != (const Address& obj);
bool operator < (const Address& obj);
bool operator > (const Address& obj);
bool operator <=(const Address& obj);
bool operator >=(const Address& obj);
void SetStreet(string& stStreet);
string GetStreet();
void SetLocality(string& stLocality);
string GetLocality();
void SetCity(string& stCity);
string GetCity();
void SetState(string& stState);
string GetState();
void SetCountry(string& stCountry);
string GetCountry();
};
<pre>#include <string>
#include <vector>
#include "AppTypes.h"
#include "Address.h"
using namespace std;
class SchInfo
{
SchType m_eSchType{ SchType::ST_NA };
protected:
string m_stSchName;
Address m_Addr;
vector<string> m_vSubjOfferred;
string m_stLogoPath;
int m_iTimesSchOpened;
public:
SchInfo() = default;
SchInfo(const SchInfo& obj) = default;
SchInfo(SchInfo&& obj) = default;
SchInfo& operator = (const SchInfo& obj) = default;
SchInfo& operator = (SchInfo&& obj) = default;
bool operator == (const SchInfo& obj);
bool operator != (const SchInfo& obj);
bool operator < (const SchInfo& obj);
bool operator > (const SchInfo& obj);
bool operator <= (const SchInfo& obj);
bool operator >= (const SchInfo& obj);
void SetSchName(string& stSchName);
string GetSchName();
void SetSchType(SchType& eSchType);
SchType GetSchType();
void SetAddress(Address& Addr);
Address GetAddress();
void SetSubjOfferred(vector<string>& vSubjOfferred);
vector<string> GetSubjOfferred();
void SetLogoPath(string& stLogoPath);
string GetLogoPath();
void SetTimesSchOpened(int &iTimesSchOpened);
int GetTimesSchOpened();
};
<pre>#include <string>
#include "SchInfo.h"
#include "AppTypes.h"
using namespace std;
class ArmInfo : public SchInfo
{
protected:
string m_stArmName;
ArmType m_eArmType{ ArmType::AT_NA };
pair<string, string> m_pSession;
public:
ArmInfo() = default;
ArmInfo(const ArmInfo& obj) = default;
ArmInfo(ArmInfo&& obj) = default;
ArmInfo& operator = (const ArmInfo& obj) = default;
ArmInfo& operator = (ArmInfo&& obj) = default;
bool operator == (const ArmInfo& obj);
bool operator != (const ArmInfo& obj);
bool operator < (const ArmInfo& obj);
bool operator > (const ArmInfo& obj);
bool operator <= (const ArmInfo& obj);
bool operator >= (const ArmInfo& obj);
void SetArmName(string& stArmName);
string GetArmName();
void SetArmType(ArmType& eArmType);
ArmType GetArmType();
void SetSession(pair<string, string>& pSession);
pair<string, string> GetSession();
};
<pre>#include <string>
#include "ArmInfo.h"
class ClassInfo : public ArmInfo
{
protected:
string m_stClassName;
public:
ClassInfo() = default;
ClassInfo(const ClassInfo& obj) = default;
ClassInfo(ClassInfo&& obj) = default;
ClassInfo& operator = (const ClassInfo& obj) = default;
ClassInfo& operator = (ClassInfo&& obj) = default;
bool operator == (const ClassInfo& obj);
bool operator != (const ClassInfo& obj);
bool operator < (const ClassInfo& obj);
bool operator > (const ClassInfo& obj);
bool operator <= (const ClassInfo& obj);
bool operator >= (const ClassInfo& obj);
void SetClassName(string& stClassName);
string GetClassName();
};
<pre>#include <string>
#include <map>
#include <vector>
#include <stdexcept>
#include "SchInfo.h"
#include "ArmInfo.h"
#include "ClassInfo.h"
#include "AppTypes.h"
#include "CreateName.h"
using namespace std;
class StudentInfo : public ClassInfo
{
string m_stSurname;
string m_stFirstName;
string m_stMiddleName;
int m_iAge{};
StudentType m_eStudentType{ StudentType::SDT_NA };
map<string, string> m_mCAScores;
map<string, string> m_mExamScores;
vector <map<string, int>> m_vSessionScores;
map<string, vector<string>> m_mSubjectPermfomance;
map<string, string> m_mPsychomotorSkillRating;
map<string, string> m_mAffectiveDomainRating;
string m_stClassTeacherComment;
string m_stPrincipalComment;
int m_iGPA{};
int m_iTotalAttendance{};
string m_stPicturePath;
int m_iStudentTotal{};
double m_dStudentAverage{};
int m_iAnnualStudentTotal{};
double m_dAnnualStudentAverage{};
map<string, int> m_mTermCount;
public:
StudentInfo() = default;
StudentInfo(const StudentInfo& obj) = default;
StudentInfo(StudentInfo&& obj) = default;
StudentInfo& operator = (const StudentInfo& obj) = default;
StudentInfo& operator = (StudentInfo&& obj) = default;
bool operator == (const StudentInfo& obj);
bool operator != (const StudentInfo& obj);
bool operator < (const StudentInfo& obj);
bool operator > (const StudentInfo& obj);
bool operator <= (const StudentInfo& obj);
bool operator >= (const StudentInfo& obj);
void SetSurname(string& stSurname);
string GetSurname();
void SetFirstName(string& stFirstName);
string GetFirstName();
void SetMiddleName(string& stMiddleName);
string GetMiddleName();
void SetAge(int iAge);
int GetAge();
void SetStudentType(StudentType& eStudentType);
StudentType GetStudentType();
void SetCAScores(map<string, string>& mCAScores);
map<string, string> GetCAScores();
void SetExamScores(map<string, string>& mExamScores);
map<string, string> GetExamScores();
void SetSessionScores(map<string, int>& vSessionScores);
map<string, int> GetSessionScores(int iIndex);
map<string, vector<string>> GetSubjectPermfomance();
void SetSubjectPermfomance(map<string, vector<string>>& mSubjectPermfomance);
void SetPsychomotorSkillRating(map<string, string>& mPsychomotorSkillRating);
map<string, string> GetPsychomotorSkillRating();
void SetAffectiveDomainRating(map<string, string>& mAffectiveDomainRating);
map<string, string> GetAffectiveDomainRating();
void SetClassTeacherComment(string& stClassTeacherComment);
string GetClassTeacherComment();
void SetPrincipalComment(string& stPrincipalComment);
string GetPrincipalComment();
void SetPicturePath(string& stPicturePath);
string GetPicturePath();
void SetTotalAttendance(int& iTotalAttendance);
int GetTotalAttendance();
void SetGPA(int& iGPA);
int GetGPA();
void SetStudentTotal(int &iStudentTotal);
int GetStudentTotal();
void SetStudentAverage(double &dStudentAverage);
double GetStudentAverage();
void SetTermCount(map<string, int> &mTermCont);
map<string, int> GetTermCount();
void SetAnnualStudentAverage(double& dAnnualStudentAverage);
double GetAnnualStudentAverage();
string GetName();
};
<pre>#include <string>
#include "ArmInfo.h"
class ClassInfo : public ArmInfo
{
protected:
string m_stClassName;
public:
ClassInfo() = default;
ClassInfo(const ClassInfo& obj) = default;
ClassInfo(ClassInfo&& obj) = default;
ClassInfo& operator = (const ClassInfo& obj) = default;
ClassInfo& operator = (ClassInfo&& obj) = default;
bool operator == (const ClassInfo& obj);
bool operator != (const ClassInfo& obj);
bool operator < (const ClassInfo& obj);
bool operator > (const ClassInfo& obj);
bool operator <= (const ClassInfo& obj);
bool operator >= (const ClassInfo& obj);
void SetClassName(string& stClassName);
string GetClassName();
};
<pre>#include <string>
#include <vector>
#include <map>
#include <stdexcept>
#include "Address.h"
#include "SchInfo.h"
#include "ArmInfo.h"
#include "ClassInfo.h"
#include "StudentInfo.h"
#include "AppTypes.h"
using namespace std;
class ClassResult
{
vector<StudentInfo> m_vStudResult;
public:
ClassResult() = default;
ClassResult(const ClassResult& obj) = default;
ClassResult(ClassResult&& obj) = default;
ClassResult& operator = (const ClassResult& obj) = default;
ClassResult& operator = (ClassResult&& obj) = default;
bool operator == (const ClassResult& obj);
bool operator != (const ClassResult& obj);
bool operator >= (const ClassResult& obj);
bool operator <= (const ClassResult& obj);
bool operator < (const ClassResult& obj);
bool operator > (const ClassResult& obj);
void SetStudResult(StudentInfo &StudResult);
StudentInfo GetStudResult(int iIndex);
StudentInfo& operator[](int iIndex);
int size();
vector<StudentInfo>::iterator begin();
vector<StudentInfo>::iterator end();
void clear() { return m_vStudResult.clear(); }
};
The euality operator foreach class is shown below:
<pre>bool Address::operator == (const Address& obj)
{
return ((m_stStreet == obj.m_stStreet) &&
(m_stLocality == obj.m_stLocality) &&
(m_stCity == obj.m_stCity) &&
(m_stState == obj.m_stState) &&
(m_stCountry == obj.m_stCountry));
}
bool SchInfo::operator == (const SchInfo& obj)
{
return ((m_eSchType == obj.m_eSchType) &&
(m_stSchName == obj.m_stSchName) &&
(m_Addr == obj.m_Addr) &&
(m_vSubjOfferred == obj.m_vSubjOfferred) &&
(m_stLogoPath == obj.m_stLogoPath) &&
(m_iTimesSchOpened == obj.m_iTimesSchOpened));
}
<pre>bool ArmInfo::operator == (const ArmInfo& obj)
{
return ((m_stArmName == obj.m_stArmName) &&
(m_eArmType == obj.m_eArmType) &&
(m_pSession == obj.m_pSession) &&
(dynamic_cast<SchInfo&>(*this) == dynamic_cast<SchInfo&>(const_cast<ArmInfo&>(obj)))
);
}
bool ClassInfo::operator == (const ClassInfo& obj)
{
return ((m_stArmName == obj.m_stArmName) &&
(dynamic_cast<ArmInfo&>(*this) == dynamic_cast<ArmInfo&>(const_cast<ClassInfo&>(obj))) &&
(dynamic_cast<SchInfo&>(*this) == dynamic_cast<SchInfo&>(const_cast<ClassInfo&>(obj)))
);
}
<pre>bool StudentInfo::operator == (const StudentInfo& obj)
{
return ((m_stSurname == obj.m_stSurname) &&
(m_stFirstName == obj.m_stFirstName) &&
(m_stMiddleName == obj.m_stMiddleName) &&
(m_iAge == obj.m_iAge) &&
(m_eStudentType == obj.m_eStudentType) &&
(m_mCAScores == obj.m_mCAScores) &&
(m_mExamScores == obj.m_mExamScores) &&
(m_vSessionScores == obj.m_vSessionScores) &&
(m_stPicturePath == obj.m_stPicturePath) &&
(m_iTotalAttendance == obj.m_iTotalAttendance) &&
(m_mSubjectPermfomance == obj.m_mSubjectPermfomance) &&
(m_mPsychomotorSkillRating == obj.m_mPsychomotorSkillRating) &&
(m_mAffectiveDomainRating == obj.m_mAffectiveDomainRating) &&
(m_stClassTeacherComment == obj.m_stClassTeacherComment) &&
(m_stPrincipalComment == obj.m_stPrincipalComment) &&
(m_iGPA == obj.m_iGPA) &&
(m_iStudentTotal == obj.m_iStudentTotal) &&
(m_dStudentAverage == obj.m_dStudentAverage) &&
(m_mTermCount == obj.m_mTermCount) &&
(m_iAnnualStudentTotal == obj.m_iAnnualStudentTotal) &&
(m_dAnnualStudentAverage == obj.m_dAnnualStudentAverage) &&
(dynamic_cast<ClassInfo&>(*this) == dynamic_cast<ClassInfo&>(const_cast<StudentInfo&>(obj))) &&
(dynamic_cast<ArmInfo&>(*this) == dynamic_cast<ArmInfo&>(const_cast<StudentInfo&>(obj))) &&
(dynamic_cast<SchInfo&>(*this) == dynamic_cast<SchInfo&>(const_cast<StudentInfo&>(obj)))
);
}
bool ClassResult::operator == (const ClassResult& obj)
{
return (m_vStudResult == obj.m_vStudResult);
}
I removed the dynamic cast in the classes above and replaced them with actual base class data member comparison and I got the following two compiation errors. What do they mean?
1.
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): error C3889: call to object of class type 'std::equal_to<void>': no matching call operator found
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstddef(210,31): message : could be 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : Failed to specialize function template 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : With the following template arguments:
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : '_Ty1=const StudentInfo &'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : '_Ty2=const StudentInfo &'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5194,17): message : see reference to function template instantiation 'bool std::equal<_InIt1,_InIt2,std::equal_to<void>>(const _InIt1,const _InIt1,const _InIt2,_Pr)' being compiled
1> with
1> [
1> _InIt1=const StudentInfo *,
1> _InIt2=const StudentInfo *,
1> _Pr=std::equal_to<void>
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vector(2228,21): message : see reference to function template instantiation 'bool std::equal<const StudentInfo*,const StudentInfo*>(const _InIt1,const _InIt1,const _InIt2)' being compiled
1> with
1> [
1> _InIt1=const StudentInfo *,
1> _InIt2=const StudentInfo *
1> ]
1>C:\Users\HP\source\repos\ResultSheets\ClassResult.h(97,24): message : see reference to function template instantiation 'bool std::operator ==<StudentInfo,std::allocator<StudentInfo>>(const std::vector<StudentInfo,std::allocator<StudentInfo>> &,const std::vector<StudentInfo,std::allocator<StudentInfo>> &)' being compiled
1>UpdateStudentRecord.cpp
2.
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): error C3889: call to object of class type 'std::equal_to<void>': no matching call operator found
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xstddef(210,31): message : could be 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : Failed to specialize function template 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) noexcept(<expr>) const'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : With the following template arguments:
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : '_Ty1=const StudentInfo &'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5177,14): message : '_Ty2=const StudentInfo &'
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\xutility(5194,17): message : see reference to function template instantiation 'bool std::equal<_InIt1,_InIt2,std::equal_to<void>>(const _InIt1,const _InIt1,const _InIt2,_Pr)' being compiled
1> with
1> [
1> _InIt1=const StudentInfo *,
1> _InIt2=const StudentInfo *,
1> _Pr=std::equal_to<void>
1> ]
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vector(2228,21): message : see reference to function template instantiation 'bool std::equal<const StudentInfo*,const StudentInfo*>(const _InIt1,const _InIt1,const _InIt2)' being compiled
1> with
1> [
1> _InIt1=const StudentInfo *,
1> _InIt2=const StudentInfo *
1> ]
1>C:\Users\HP\source\repos\ResultSheets\ClassResult.h(97,24): message : see reference to function template instantiation 'bool std::operator ==<StudentInfo,std::allocator<StudentInfo>>(const std::vector<StudentInfo,std::allocator<StudentInfo>> &,const std::vector<StudentInfo,std::allocator<StudentInfo>> &)' being compiled
What I have tried:
I have spent hours trying to figure otthe error. I don't thinkgoogle can help with this.