#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <list>
#include <utility>
#include <numeric>

using namespace std;
typedef long long llong;
typedef unsigned long long ullong;

const ullong MOD = 1000000000 + 7;

template <typename T> class Vector2D
{
	public:
		T x, y;

		Vector2D(T x, T y)
		{
			this->x = x;
			this->y = y;
		}
};

template <typename T>
T inner(Vector2D<T> a, Vector2D<T> b)
{
	return a.x * b.x + a.y * b.y;
}

int main()
{
	vector<float> x(4);
	vector<float> y(4);
	for (; cin >> x.at(0) >> y.at(0) >> x.at(1) >> y.at(1) >> x.at(2) >> y.at(2) >> x.at(3) >> y.at(3);)
	{
		Vector2D<float> ab = Vector2D<float>(x.at(1) - x.at(0), y.at(1) - y.at(0));
		Vector2D<float> cd = Vector2D<float>(x.at(3) - x.at(2), y.at(3) - y.at(2));

		cout << (inner(ab, cd) == 0 ? "YES" : "NO") << endl;
	}
}
