#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <algorithm>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <numeric>
#include <cmath>
#include <climits>
#include <limits>
#include <cfloat>
#include <fstream>
#include <complex>

using namespace std;

typedef complex<double> P;

#define EPS (1e-10)
#define EQ(a,b) (abs((a)-(b)) < EPS)


// àÏ (dot product) : a&#8901;b = |a||b|cosÆ
double dot(P a, P b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
// 2¼üÌ¼ð»è : aÛb <=> dot(a, b) = 0
int is_orthogonal (P a, P b) {
  return EQ( dot(a, b), 0.0 );
}

int main()
{
//	cut here before submit 
//	freopen("testcase.orthognal", "r", stdin);
	string str = "";
	while (getline (cin, str ) ){
		if (str.empty() ){
			break;
		} // end if
		double xa, ya, xb, yb, xc, yc, xd, yd;
		stringstream ss(str);
		ss >> xa >> ya >> xb >> yb >> xc >> yc >> xd >> yd;

		P A(xa, ya), B(xb, yb), C(xc, yc), D(xd, yd);
		P Vab = B - A, Vcd = D - C;
			
		if (is_orthogonal (Vab, Vcd ) ){
			cout << "YES" << endl;
		}else{
			cout << "NO" << endl;
		} // end if	
	} // end loop

//	cout << res << endl;	
		
	return 0;
}