#include <bits/stdc++.h>
using namespace std;
template <class T>
bool cmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
bool cmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
const int N = 123456;
const int INF = 1e9;
int n;
int x[N], y[N];
vector<int> id[2];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    x[i] = a - b;
    y[i] = a + b;
    id[abs(x[i]) % 2].push_back(i);
  }
  long long ans = 0;
  for (int par = 0; par < 2; par++) {
    vector<int>& v = id[par];
    multiset<int> m;
    int x2 = -INF, x1 = +INF;
    for (int i : v) m.insert(x[i]);
    sort(v.begin(), v.end(),
         [&](const int& i, const int& j) -> bool { return y[i] < y[j]; });
    for (int i = 0; i < ((int)(v).size());) {
      int j = i;
      while (j < ((int)(v).size()) && y[v[j]] == y[v[i]]) {
        m.erase(m.find(x[v[j]]));
        cmin(x1, x[v[j]]);
        cmax(x2, x[v[j]]);
        j++;
      }
      if (((int)(m).size()) > 0) {
        assert(j < ((int)(v).size()));
        int z1 = *m.begin();
        int z2 = *m.rbegin();
        int l = max(z1, x1), r = min(z2, x2);
        int u = y[v[j]], d = y[v[i]];
        if (l < r) {
          ans += 1LL * (r - l) / 2LL * 1LL * (u - d) / 2LL;
        }
      }
      i = j;
    }
  }
  printf("%lld\n", ans);
  return 0;
}
