#include <iostream>
#include <cstdio>
using namespace std;
#define LL long long
#define LIMIT 263000
LL segment_tree[LIMIT];
LL lazy[LIMIT];
void build(int t,int i,int j)
{
if(i==j)
{
segment_tree[t]= 0;
lazy[t] = segment_tree[t];
return;
}
int left = t<<1;
int right = left|1;
int mid = (i+j)>>1;
build(left, i, mid);
build(right, mid+1, j);
segment_tree[t]= segment_tree[left] + segment_tree[right];
lazy[t] = segment_tree[t];
}
void lazy_propagate(int t, int i, int j)
{
if(lazy[t]!=0)
{
segment_tree[t] += (j-i+1)*lazy[t];
if(i!=j)
{
int left = t<<1;
int right = left|1;
lazy[left] += lazy[t];
lazy[right] += lazy[t];
}
lazy[t]=0;
}
}
void update(int t, int i, int j, int a, int b, LL v)
{
lazy_propagate(t, i, j);
if(i>j || i>b || j<a)
return ;
if(i>=a && j<=b)
{
lazy[t] = v;
lazy_propagate(t, i, j);
return ;
}
int left = t<<1;
int right = left|1;
int mid = (i+j)>>1;
update(left, i, mid, a, b, v);
update(right, mid+1, j, a, b, v);
segment_tree[t] = segment_tree[left] + segment_tree[right];
}
LL query(int t, int i, int j, int a, int b)
{
lazy_propagate(t, i, j);
if(i>j || i>b || j<a)
return 0;
if(i>=a && j<=b)
return segment_tree[t];
int left = t<<1;
int right = left|1;
int mid = (i+j)>>1;
return query(left, i, mid, a, b) + query(right, mid+1, j, a, b);
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int N, Q, type, X, Y;
LL V;
scanf("%d %d", &N, &Q);
build(1, 1, N);
while(Q--)
{
scanf("%d %d %d", &type, &X, &Y);
if(type==0)
{
scanf("%lld", &V);
update(1, 1, N, X, Y, V);
}
else
{
printf("%lld", query(1, 1, N, X, Y));
putchar_unlocked('\n');
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBMTCBsb25nIGxvbmcKI2RlZmluZSBMSU1JVCAyNjMwMDAKIApMTCBzZWdtZW50X3RyZWVbTElNSVRdOwogCkxMIGxhenlbTElNSVRdOwogCnZvaWQgYnVpbGQoaW50IHQsaW50IGksaW50IGopCnsKCWlmKGk9PWopCgl7CgkJc2VnbWVudF90cmVlW3RdPSAwOwoJCWxhenlbdF0gPSBzZWdtZW50X3RyZWVbdF07CgkJcmV0dXJuOwoJfQoJaW50IGxlZnQgPSB0PDwxOwoJaW50IHJpZ2h0ID0gbGVmdHwxOwoJaW50IG1pZCA9IChpK2opPj4xOwkKCWJ1aWxkKGxlZnQsIGksIG1pZCk7CglidWlsZChyaWdodCwgbWlkKzEsIGopOwoJc2VnbWVudF90cmVlW3RdPSBzZWdtZW50X3RyZWVbbGVmdF0gKyBzZWdtZW50X3RyZWVbcmlnaHRdOwoJbGF6eVt0XSA9IHNlZ21lbnRfdHJlZVt0XTsKfQogCnZvaWQgbGF6eV9wcm9wYWdhdGUoaW50IHQsIGludCBpLCBpbnQgaikKewogICAgaWYobGF6eVt0XSE9MCkKICAgIHsKICAgICAgICBzZWdtZW50X3RyZWVbdF0gKz0gKGotaSsxKSpsYXp5W3RdOwogICAgICAgIGlmKGkhPWopCiAgICAgICAgewogICAgICAgICAgICBpbnQgbGVmdCA9IHQ8PDE7CiAgICAgICAgICAgIGludCByaWdodCA9IGxlZnR8MTsKICAgICAgICAgICAgbGF6eVtsZWZ0XSArPSBsYXp5W3RdOwogICAgICAgICAgICBsYXp5W3JpZ2h0XSArPSBsYXp5W3RdOwogICAgICAgIH0KICAgICAgICBsYXp5W3RdPTA7CiAgICB9Cn0KIAp2b2lkIHVwZGF0ZShpbnQgdCwgaW50IGksIGludCBqLCBpbnQgYSwgaW50IGIsIExMIHYpCnsKICAgIGxhenlfcHJvcGFnYXRlKHQsIGksIGopOwogICAgaWYoaT5qIHx8IGk+YiB8fCBqPGEpCiAgICAgICAgcmV0dXJuIDsKICAgIGlmKGk+PWEgJiYgajw9YikKICAgIHsKICAgICAgICBsYXp5W3RdID0gdjsKICAgICAgICBsYXp5X3Byb3BhZ2F0ZSh0LCBpLCBqKTsKICAgICAgICByZXR1cm4gOwogICAgfQoJaW50IGxlZnQgPSB0PDwxOwoJaW50IHJpZ2h0ID0gbGVmdHwxOwoJaW50IG1pZCA9IChpK2opPj4xOwkKICAgIHVwZGF0ZShsZWZ0LCBpLCBtaWQsIGEsIGIsIHYpOwogICAgdXBkYXRlKHJpZ2h0LCBtaWQrMSwgaiwgYSwgYiwgdik7CiAgICBzZWdtZW50X3RyZWVbdF0gPSBzZWdtZW50X3RyZWVbbGVmdF0gKyBzZWdtZW50X3RyZWVbcmlnaHRdOwp9CiAKTEwgcXVlcnkoaW50IHQsIGludCBpLCBpbnQgaiwgaW50IGEsIGludCBiKQp7CiAgICBsYXp5X3Byb3BhZ2F0ZSh0LCBpLCBqKTsKICAgIGlmKGk+aiB8fCBpPmIgfHwgajxhKQogICAgICAgIHJldHVybiAwOwogICAgaWYoaT49YSAmJiBqPD1iKQogICAgICAgIHJldHVybiBzZWdtZW50X3RyZWVbdF07CglpbnQgbGVmdCA9IHQ8PDE7CglpbnQgcmlnaHQgPSBsZWZ0fDE7CglpbnQgbWlkID0gKGkraik+PjE7CQogICAgcmV0dXJuIHF1ZXJ5KGxlZnQsIGksIG1pZCwgYSwgYikgKyBxdWVyeShyaWdodCwgbWlkKzEsIGosIGEsIGIpOwp9CiAKaW50IG1haW4oKQp7CiAgICBpbnQgdDsKICAgIHNjYW5mKCIlZCIsICZ0KTsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgaW50IE4sIFEsIHR5cGUsIFgsIFk7CiAgICAgICAgTEwgVjsKICAgICAgICBzY2FuZigiJWQgJWQiLCAmTiwgJlEpOwogICAgICAgIGJ1aWxkKDEsIDEsIE4pOwogICAgICAgIHdoaWxlKFEtLSkKICAgICAgICB7CiAgICAgICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsICZ0eXBlLCAmWCwgJlkpOwogICAgICAgICAgICBpZih0eXBlPT0wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzY2FuZigiJWxsZCIsICZWKTsKICAgICAgICAgICAgICAgIHVwZGF0ZSgxLCAxLCBOLCBYLCBZLCBWKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZCIsIHF1ZXJ5KDEsIDEsIE4sIFgsIFkpKTsKICAgICAgICAgICAgICAgIHB1dGNoYXJfdW5sb2NrZWQoJ1xuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfSA=