uniform half4 colorRed;
uniform half4 colorGreen;
const int kZero_0 = 0;
int return_loop_0(int five);
const int kTen_0 = 10;
int continue_loop_0(int five);
int break_loop_0(int five);
bool loop_operator_le_0();
bool loop_operator_lt_0();
bool loop_operator_ge_0();
bool loop_operator_gt_0();
bool loop_operator_ne_0();
bool loop_operator_eq_0();
int return_loop_0(int five)
{
	for (int i = kZero_0;i < 10; ++i) 
	{
		if (i == five) 
		{
			return i;
		}
	}
	return 0;
}
int continue_loop_0(int five)
{
	int sum = 0;
	for (int i = 0;i < kTen_0; ++i) 
	{
		if (i < five) 
		{
			continue;
		}
		sum += i;
	}
	return sum;
}
int break_loop_0(int five)
{
	int sum = 0;
	const int kOne = 1;
	for (int i = 0;i < 10; i += kOne) 
	{
		if (i > five) 
		{
			break;
		}
		sum += i;
	}
	return sum;
}
bool loop_operator_le_0()
{
	;
	;
	int4 result = int4(9);
	for (int i = 1;i <= 3; ++i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 1, 2, 3);
}
bool loop_operator_lt_0()
{
	;
	;
	int4 result = int4(9);
	for (int i = 1;i < 4; ++i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 1, 2, 3);
}
bool loop_operator_ge_0()
{
	;
	;
	int4 result = int4(9);
	for (int i = 3;i >= 1; --i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 3, 2, 1);
}
bool loop_operator_gt_0()
{
	;
	;
	int4 result = int4(9);
	for (int i = 3;i > 0; --i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 3, 2, 1);
}
bool loop_operator_ne_0()
{
	;
	int4 result = int4(9);
	for (int i = 1;i != 4; ++i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 1, 2, 3);
}
bool loop_operator_eq_0()
{
	;
	int4 result = int4(9);
	for (int i = 1;i == 1; ++i) 
	{
		result = int4(result.yzw, i);
	}
	return result == int4(9, 9, 9, 1);
}
half4 main(float2 pos)
{
	int five = int(clamp(_coords.x, float(colorGreen.y), float(colorGreen.w))) * 5;
	return half4((((((((return_loop_0(five) == 5 && continue_loop_0(five) == 35) && break_loop_0(5) == 15) && loop_operator_le_0()) && loop_operator_lt_0()) && loop_operator_ge_0()) && loop_operator_gt_0()) && loop_operator_eq_0()) && loop_operator_ne_0() ? colorGreen : colorRed);
}
