#include <bits/stdc++.h>
using namespace std;
const long long N = 100005;
long long n;
long long a[N], arr[N][22], seg[4 * N][22], lazy[4 * N][22];
void build(long long node, long long l, long long r) {
  if (l == r) {
    for (long long j = 0; j < 21; j++) {
      lazy[node][j] = 0;
      seg[node][j] = arr[l][j];
    }
    return;
  }
  long long mid = (l + r) / 2;
  build(2 * node + 1, l, mid);
  build(2 * node + 2, mid + 1, r);
  for (long long j = 0; j < 21; j++) {
    lazy[node][j] = 0;
    seg[node][j] = seg[2 * node + 1][j] + seg[2 * node + 2][j];
  }
}
void prop(long long node, long long l, long long r, long long j) {
  if (l > r) return;
  if (lazy[node][j] != 0) {
    if (lazy[node][j] % 2 == 1) {
      seg[node][j] = (r - l + 1) - seg[node][j];
    }
    if (l != r) {
      lazy[2 * node + 1][j] += lazy[node][j];
      lazy[2 * node + 2][j] += lazy[node][j];
    }
    lazy[node][j] = 0;
  }
}
void update(long long node, long long l, long long r, long long x, long long y,
            long long j) {
  prop(node, l, r, j);
  if (l > r || r < x || l > y) return;
  if (l >= x && r <= y) {
    lazy[node][j] = 1;
    prop(node, l, r, j);
    return;
  }
  long long mid = (l + r) / 2;
  update(2 * node + 1, l, mid, x, y, j);
  update(2 * node + 2, mid + 1, r, x, y, j);
  seg[node][j] = seg[2 * node + 1][j] + seg[2 * node + 2][j];
}
long long query(long long node, long long l, long long r, long long x,
                long long y, long long j) {
  prop(node, l, r, j);
  if (l > r || r < x || l > y) return 0;
  if (l >= x && r <= y) return seg[node][j];
  long long mid = (l + r) / 2;
  long long lol1 = query(2 * node + 1, l, mid, x, y, j);
  long long lol2 = query(2 * node + 2, mid + 1, r, x, y, j);
  return (lol1 + lol2);
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  cin >> n;
  memset(arr, 0, sizeof(arr));
  for (long long i = 0; i < n; i++) cin >> a[i];
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < 22; j++) {
      if ((1 << j) & a[i])
        arr[i][j] = 1;
      else
        arr[i][j] = 0;
    }
  }
  build(0, 0, n - 1);
  long long m;
  cin >> m;
  while (m--) {
    long long t;
    cin >> t;
    if (t == 1) {
      long long l, r;
      cin >> l >> r;
      l--, r--;
      long long sum = 0;
      for (long long j = 0; j < 21; j++) {
        sum += ((1 << j) * query(0, 0, n - 1, l, r, j));
      }
      cout << sum << "\n";
    } else {
      long long l, r, x;
      cin >> l >> r >> x;
      l--, r--;
      for (long long j = 0; j < 21; j++) {
        if ((1 << j) & x) {
          update(0, 0, n - 1, l, r, j);
        }
      }
    }
  }
  return 0;
}
