#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
long long tree[400020][21], lazy[400020][21], arr[100005];
void build(int l, int r, int node, int i) {
  if (l == r) {
    tree[node][i] = 0;
    if (arr[l] & (1 << i)) {
      tree[node][i] = 1;
    }
    return;
  }
  int mid = (l + r) >> 1;
  build(l, mid, 2 * node, i);
  build(mid + 1, r, 2 * node + 1, i);
  tree[node][i] = tree[2 * node][i] + tree[2 * node + 1][i];
  return;
}
void update(int l, int r, int ql, int qr, int node, int i) {
  if (lazy[node][i]) {
    tree[node][i] = (r - l + 1) - tree[node][i];
    if (l != r) {
      lazy[2 * node][i] ^= 1;
      lazy[2 * node + 1][i] ^= 1;
    }
    lazy[node][i] = 0;
  }
  if (l > qr || r < ql) return;
  if (ql <= l && r <= qr) {
    tree[node][i] = (r - l + 1) - tree[node][i];
    if (l != r) {
      lazy[2 * node][i] ^= 1;
      lazy[2 * node + 1][i] ^= 1;
    }
    lazy[node][i] = 0;
    return;
  }
  int mid = (l + r) >> 1;
  update(l, mid, ql, qr, 2 * node, i);
  update(mid + 1, r, ql, qr, 2 * node + 1, i);
  tree[node][i] = tree[2 * node][i] + tree[2 * node + 1][i];
  return;
}
long long query(int l, int r, int ql, int qr, int node, int i) {
  if (lazy[node][i]) {
    tree[node][i] = (r - l + 1) - tree[node][i];
    if (l != r) {
      lazy[2 * node][i] ^= 1;
      lazy[2 * node + 1][i] ^= 1;
    }
    lazy[node][i] = 0;
  }
  if (l > qr || r < ql) return 0;
  if (ql <= l && r <= qr) return tree[node][i];
  int mid = (l + r) >> 1;
  return query(l, mid, ql, qr, 2 * node, i) +
         query(mid + 1, r, ql, qr, 2 * node + 1, i);
}
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> arr[i];
  }
  for (int i = 0; i < 20; ++i) {
    build(0, n - 1, 1, i);
  }
  int q;
  cin >> q;
  while (q--) {
    int id, l, r;
    long long x;
    cin >> id;
    if (id == 1) {
      cin >> l >> r;
      l--, r--;
      long long ans = 0;
      for (int i = 0; i < 20; i++)
        ans += (query(0, n - 1, l, r, 1, i)) * (1LL << i);
      cout << ans << "\n";
    } else {
      cin >> l >> r >> x;
      l--, r--;
      for (int i = 0; i < 20; ++i) {
        if (x & (1LL << i)) {
          update(0, n - 1, l, r, 1, i);
        }
      }
    }
  }
  return 0;
}
