#include <bits/stdc++.h>
using namespace std;
int n, a[100005], m, b[100005];
struct ID {
  int val;
  bool lazy;
};
struct IT {
  ID tree[100005 * 6];
  void build(int l, int r, int node, int b[]) {
    if (l == r) {
      tree[node].val = b[l];
      return;
    }
    int mid = (r + l) >> 1;
    build(l, mid, node * 2, b);
    build(mid + 1, r, node * 2 + 1, b);
    tree[node].val = tree[node * 2].val + tree[node * 2 + 1].val;
  }
  void down(int node, int l, int r) {
    if (!tree[node].lazy) return;
    int mid = (r + l) >> 1;
    tree[node * 2].val = (mid - l + 1) - tree[node * 2].val;
    tree[node * 2].lazy = !tree[node * 2].lazy;
    tree[node * 2 + 1].val = (r - mid) - tree[node * 2 + 1].val;
    tree[node * 2 + 1].lazy = !tree[node * 2 + 1].lazy;
    tree[node].lazy = 0;
  }
  int getAns(int l, int r, int node, int u, int v) {
    if (r < u || v < l) return 0;
    if (u <= l && r <= v) return tree[node].val;
    int mid = (r + l) >> 1;
    down(node, l, r);
    return getAns(l, mid, node * 2, u, v) +
           getAns(mid + 1, r, node * 2 + 1, u, v);
  }
  void update(int l, int r, int node, int u, int v) {
    if (v < l || r < u) return;
    if (u <= l && r <= v) {
      tree[node].val = (r - l + 1) - tree[node].val;
      tree[node].lazy = !tree[node].lazy;
      return;
    }
    int mid = (r + l) >> 1;
    down(node, l, r);
    update(l, mid, node * 2, u, v);
    update(mid + 1, r, node * 2 + 1, u, v);
    tree[node].val = tree[node * 2].val + tree[node * 2 + 1].val;
  }
} t[22];
int getbit(int i, int num) { return (num >> i) & 1; }
void calc(int l, int r) {
  long long ans = 0;
  for (int i = (0); i <= (20); ++i)
    ans += (1ll << i) * t[i].getAns(1, n, 1, l, r);
  cout << ans << '\n';
}
void handling(int l, int r, int val) {
  for (int i = (0); i <= (20); ++i) {
    int dem = 0;
    if (!((val >> i) & 1)) continue;
    t[i].update(1, n, 1, l, r);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = (1); i <= (n); ++i) cin >> a[i];
  for (int i = (0); i <= (20); ++i) {
    for (int j = (1); j <= (n); ++j) b[j] = getbit(i, a[j]);
    t[i].build(1, n, 1, b);
  }
  cin >> m;
  while (m--) {
    int type, l, r;
    cin >> type >> l >> r;
    if (type == 1) {
      calc(l, r);
    } else {
      int val;
      cin >> val;
      handling(l, r, val);
    }
  }
  return 0;
}
