#define PRL_DEF_RELATIONAL_OP(op)\
bool operator op (const __u_quad_t&, const __u_quad_t&);\
bool operator op (const __u_quad_t&, const __quad_t&);\
bool operator op (const __u_quad_t&, int);\
bool operator op (const __u_quad_t&, unsigned);\
bool operator op (const __u_quad_t&, long);\
bool operator op (const __u_quad_t&, unsigned long);\
bool operator op (int, const __u_quad_t&);\
bool operator op (unsigned, const __u_quad_t&);\
bool operator op (long, const __u_quad_t&);\
bool operator op (unsigned long, const __u_quad_t&);\
bool operator op (const __quad_t&, const __quad_t&);\
bool operator op (const __quad_t&, const __u_quad_t&);\
bool operator op (const __quad_t&, int);\
bool operator op (const __quad_t&, unsigned);\
bool operator op (const __quad_t&, long);\
bool operator op (const __quad_t&, unsigned long);\
bool operator op (int, const __quad_t&);\
bool operator op (unsigned, const __quad_t&);\
bool operator op (long, const __quad_t&);\
bool operator op (unsigned long, const __quad_t&);

#define PRL_DEF_ARITHMETIC_OP(op)\
const __u_quad_t operator op (const __u_quad_t&, const __u_quad_t&);\
const __u_quad_t operator op (const __u_quad_t&, const __quad_t&);\
const __u_quad_t operator op (const __u_quad_t&, int);\
const __u_quad_t operator op (const __u_quad_t&, unsigned);\
const __u_quad_t operator op (const __u_quad_t&, long);\
const __u_quad_t operator op (const __u_quad_t&, unsigned long);\
const __u_quad_t operator op (int, const __u_quad_t&);\
const __u_quad_t operator op (unsigned, const __u_quad_t&);\
const __u_quad_t operator op (long, const __u_quad_t&);\
const __u_quad_t operator op (unsigned long, const __u_quad_t&);\
const __quad_t operator op (const __quad_t&, const __quad_t&);\
const __u_quad_t operator op (const __quad_t&, const __u_quad_t&);\
const __quad_t operator op (const __quad_t&, int);\
const __quad_t operator op (const __quad_t&, unsigned);\
const __quad_t operator op (const __quad_t&, long);\
const __quad_t operator op (const __quad_t&, unsigned long);\
const __quad_t operator op (int, const __quad_t&);\
const __quad_t operator op (unsigned, const __quad_t&);\
const __quad_t operator op (long, const __quad_t&);\
const __quad_t operator op (unsigned long, const __quad_t&);

#define PRL_DEF_CLASS_OP(op,T)\
const T operator op (int) const;\
const T operator op (unsigned) const;\
const T operator op (long) const;\
const T operator op (unsigned long) const;\
const T operator op (__quad_t) const;\
const T operator op (__u_quad_t) const;

class __u_quad_t;

class __quad_t
{
public:
   long int __val[2];

	__quad_t();
	__quad_t(bool);
	__quad_t(char);
	__quad_t(signed char);
	__quad_t(unsigned char);
	__quad_t(short);
	__quad_t(unsigned short);
	__quad_t(int);
	__quad_t(unsigned);
	__quad_t(long);
	__quad_t(unsigned long);
	__quad_t(float);
	__quad_t(double);
	__quad_t(long double);
	__quad_t(const __quad_t&);
	__quad_t(const __u_quad_t&);

	operator bool() const;
	operator char() const;
	operator signed char() const;
	operator unsigned char() const;
	operator short() const;
	operator unsigned short() const;
	operator int() const;
	operator unsigned() const;
	operator long() const;
	operator unsigned long() const;
	operator float() const;
	operator double() const;
	operator long double() const;

	__quad_t& operator+=(const __quad_t&);
	__quad_t& operator-=(const __quad_t&);
	__quad_t& operator*=(const __quad_t&);
	__quad_t& operator/=(const __quad_t&);
	__quad_t& operator%=(const __quad_t&);
	__quad_t& operator<<=(const __quad_t&);
	__quad_t& operator>>=(const __quad_t&);
	__quad_t& operator&=(const __quad_t&);
	__quad_t& operator|=(const __quad_t&);
	__quad_t& operator^=(const __quad_t&);
	const __quad_t operator+() const;
	const __quad_t operator-() const;
	const __quad_t operator~() const;
	__quad_t& operator++();
	__quad_t& operator--();
	const __quad_t operator++(int);
	const __quad_t operator--(int);

	PRL_DEF_CLASS_OP(<<,__quad_t)
	PRL_DEF_CLASS_OP(>>,__quad_t)
};

class __u_quad_t
{
public:
   unsigned long __val[2];

	__u_quad_t();
	__u_quad_t(bool);
	__u_quad_t(char);
	__u_quad_t(signed char);
	__u_quad_t(unsigned char);
	__u_quad_t(short);
	__u_quad_t(unsigned short);
	__u_quad_t(int);
	__u_quad_t(unsigned);
	__u_quad_t(long);
	__u_quad_t(unsigned long);
	__u_quad_t(float);
	__u_quad_t(double);
	__u_quad_t(long double);
	__u_quad_t(const __quad_t&);
	__u_quad_t(const __u_quad_t&);

	operator bool() const;
	operator char() const;
	operator signed char() const;
	operator unsigned char() const;
	operator short() const;
	operator unsigned short() const;
	operator int() const;
	operator unsigned() const;
	operator long() const;
	operator unsigned long() const;
	operator float() const;
	operator double() const;
	operator long double() const;
	
	__u_quad_t& operator+=(const __u_quad_t&);
	__u_quad_t& operator-=(const __u_quad_t&);
	__u_quad_t& operator*=(const __u_quad_t&);
	__u_quad_t& operator/=(const __u_quad_t&);
	__u_quad_t& operator%=(const __u_quad_t&);
	__u_quad_t& operator<<=(const __u_quad_t&);
	__u_quad_t& operator>>=(const __u_quad_t&);
	__u_quad_t& operator&=(const __u_quad_t&);
	__u_quad_t& operator|=(const __u_quad_t&);
	__u_quad_t& operator^=(const __u_quad_t&);
	const __u_quad_t operator+() const;
	const __u_quad_t operator-() const;
	const __u_quad_t operator~() const;
	__u_quad_t& operator++();
	__u_quad_t& operator--();
	const __u_quad_t operator++(int);
	const __u_quad_t operator--(int);

	PRL_DEF_CLASS_OP(<<,__u_quad_t)
	PRL_DEF_CLASS_OP(>>,__u_quad_t)
};

PRL_DEF_RELATIONAL_OP(==)
PRL_DEF_RELATIONAL_OP(!=)
PRL_DEF_RELATIONAL_OP(<)
PRL_DEF_RELATIONAL_OP(>)
PRL_DEF_RELATIONAL_OP(<=)
PRL_DEF_RELATIONAL_OP(>=)

PRL_DEF_ARITHMETIC_OP(+)
PRL_DEF_ARITHMETIC_OP(-)
PRL_DEF_ARITHMETIC_OP(*)
PRL_DEF_ARITHMETIC_OP(/)
PRL_DEF_ARITHMETIC_OP(%)
PRL_DEF_ARITHMETIC_OP(&)
PRL_DEF_ARITHMETIC_OP(|)
PRL_DEF_ARITHMETIC_OP(^)

typedef void * __builtin_va_list;
#define __builtin_va_start(ap, parmN)	((void)((ap)= &(parmN)))
#define __builtin_va_arg(ap, type)		(*(type*)(ap))
#define __builtin_va_end(ap)			((void)((ap)=0))
#define __builtin_va_copy(d,s)

double __builtin_fabs(double);
float __builtin_fabsf(float);
long double __builtin_fabsl(long double);
float __builtin_cosf(float);
long double __builtin_cosl(long double);
float __builtin_sinf(float);
long double __builtin_sinl(long double);
float __builtin_sqrtf(float);
long double __builtin_sqrtl(long double);
char* __builtin_strchr(const char*, int);
char* __builtin_strrchr(const char*, int);
char* __builtin_strstr(const char*, const char*);
char* __builtin_strpbrk(const char*, const char*);
void* __builtin_alloca(__SIZE_TYPE__);

long __builtin_expect(long exp, long c);

float __builtin_huge_valf();
double __builtin_huge_val();
long double __builtin_huge_vall();
float __builtin_nanf(const char *str);
double __builtin_nan(const char *str);
long double __builtin_nanl(const char *str);
float __builtin_nansf(const char *str);
double __builtin_nans(const char *str);
long double __builtin_nansl(const char *str);

#define __flexarr [1]

#define __FD_ISSET(fd, fdsp) ((fd)!=0)
