#include <bits/stdc++.h>
using namespace std;
int IT[4 * 100005][21], T[4 * 100005][21], a[100005], n, m;
void Load(int l, int h, int k) {
  if (l == h) {
    for (int i = 0; i < 21; i++)
      if (a[l] & (1 << i))
        IT[k][i] = 1;
      else
        IT[k][i] = 0;
    return;
  }
  int m = (l + h) / 2;
  Load(l, m, k * 2);
  Load(m + 1, h, k * 2 + 1);
  for (int i = 0; i < 21; i++) IT[k][i] = IT[k * 2][i] + IT[k * 2 + 1][i];
}
void Init() {
  memset(T, 0, sizeof(T));
  Load(1, n, 1);
}
void Update(int l, int h, int k, int i, int j, int x) {
  if (h < i || j < l) return;
  if (i <= l && h <= j) {
    for (int p = 0; p < 21; p++)
      if (x & (1 << p)) {
        T[k][p] ^= 1;
        IT[k][p] = (h - l + 1) - IT[k][p];
      }
    return;
  }
  int m = (l + h) / 2;
  for (int p = 0; p < 21; p++) {
    T[k * 2][p] ^= T[k][p];
    T[k * 2 + 1][p] ^= T[k][p];
    if (T[k][p]) {
      IT[k * 2][p] = (m - l + 1) - IT[k * 2][p];
      IT[k * 2 + 1][p] = (h - m) - IT[k * 2 + 1][p];
    }
    T[k][p] = 0;
  }
  Update(l, m, k * 2, i, j, x);
  Update(m + 1, h, k * 2 + 1, i, j, x);
  for (int p = 0; p < 21; p++) IT[k][p] = IT[k * 2][p] + IT[k * 2 + 1][p];
}
long long Get(int l, int h, int k, int I, int J) {
  if (h < I || J < l) return 0LL;
  long long ret = 0;
  if (I <= l && h <= J) {
    for (int i = 0; i < 21; i++) ret += 1LL * IT[k][i] * (1LL << i);
    return ret;
  }
  int m = (l + h) / 2;
  for (int i = 0; i < 21; i++) {
    T[k * 2][i] ^= T[k][i];
    T[k * 2 + 1][i] ^= T[k][i];
    if (T[k][i]) {
      IT[k * 2][i] = (m - l + 1) - IT[k * 2][i];
      IT[k * 2 + 1][i] = (h - m) - IT[k * 2 + 1][i];
    }
    T[k][i] = 0;
  }
  ret = Get(l, m, k * 2, I, J) + Get(m + 1, h, k * 2 + 1, I, J);
  return ret;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  Init();
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    int t, l, r, x;
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &l, &r);
      printf("%I64d\n", Get(1, n, 1, l, r));
    } else {
      scanf("%d%d%d", &l, &r, &x);
      Update(1, n, 1, l, r, x);
    }
  }
  return 0;
}
