#include<bits/stdc++.h>
#define N 200009
#define M 32
#define int long long
using namespace std;
int n,m,len,ans;
inline int get(int i){
return (i-1ll)/len+1ll;
}
inline int from(int i){
return (i-1ll)*len+1ll;
}
inline int to(int i){
return min(n,i*len);
}
bool a[N][M];
struct Block{
int sum[2];
bool add;
}block[N][M];
int query(int l,int r,int k){
int ans=0;
if(get(l)==get(r)){
for(int i=l;i<=r;i++){
ans+=a[i][k]^block[get(i)][k].add;
}
return ans;
}
for(int i=l;i<=to(get(l));i++){
ans+=a[i][k]^block[get(i)][k].add;
}
for(int i=from(get(r));i<=r;i++){
ans+=a[i][k]^block[get(i)][k].add;
}
for(int i=get(l)+1;i<=get(r)-1;i++){
ans+=block[i][k].sum[1];
}
return ans;
}
void modify(int l,int r,int k,int x){
if(x==0){
return ;
}
if(get(l)==get(r)){
for(int i=l;i<=r;i++){
block[get(i)][k].sum[a[i][k]^1^block[get(i)][k].add]++;
block[get(i)][k].sum[a[i][k]^block[get(i)][k].add]--;
a[i][k]^=1ll;
}
return ;
}
for(int i=l;i<=to(get(l));i++){
block[get(i)][k].sum[a[i][k]^1^block[get(i)][k].add]++;
block[get(i)][k].sum[a[i][k]^block[get(i)][k].add]--;
a[i][k]^=1ll;
}
for(int i=from(get(r));i<=r;i++){
block[get(i)][k].sum[a[i][k]^1^block[get(i)][k].add]++;
block[get(i)][k].sum[a[i][k]^block[get(i)][k].add]--;
a[i][k]^=1ll;
}
for(int i=get(l)+1;i<=get(r)-1;i++){
block[i][k].add^=1ll;
swap(block[i][k].sum[0],block[i][k].sum[1]);
}
return ;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
len=sqrt(n);
for(int i=1;i<=n;i++){
int x;
cin>>x;
for(int j=0;j<=30;j++){
a[i][j]=(x&(1<<j));
block[get(i)][j].sum[a[i][j]]++;
}
}
cin>>m;
for(int i=1;i<=m;i++){
int op,l,r,x;
cin>>op>>l>>r;
if(op==1){
ans=0;
for(int j=0;j<=30;j++){
ans+=query(l,r,j)<<j;
}
cout<<ans<<endl;
}
else{
cin>>x;
for(int j=0;j<=30;j++){
modify(l,r,j,x&(1<<j));
}
}
}
return 0;
}