#include <bits/stdc++.h>
#define ll long long
#define db long double
#define pll pair<ll,ll>
#define foru(i,a,b) for(ll i=(a);i<=(b);i++)
#define ford(i,a,b) for(ll i=(a);i>=(b);i--)
#define ALL(a) (a).begin(),(a).end()
#define ROUND(i) fixed<<setprecision(i)
#define fi first
#define se second
using namespace std;
clock_t start_time=clock();
int NumTest=1,CurTest;
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣶⣾⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⡞⠀⠀⢀⣤⣴⣾⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣣⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣶⣾⣿⠃⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⣀⣀⣀⡤⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣤⣶⣾⡟⠀
///⠀⠀⠀⠀⠀⠀⡰⢹⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀
///⠀⠀⠀⠀⠀⢠⣳⣿⣾⣿⣿⣿⣿⢋⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣷⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀
///⠀⠀⠀⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⡞⠀⠈⠙⠿⠿⠟⠛⠉⠀⠀⢹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀⠀⠀
///⠀⠀⠀⠀⢀⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⡄⠀⠀⠀⠀⠀⠀⠐⡄⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀
///⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⢿⣿⣿⠀⠀⡌ -TFA-⠀⠀ ⠀⢻⣿⣿⡇⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣴⡶⠋⠁
///⠀⠀⠀⠀⢸⣿⣿⣿⣿⡟⢻⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣼⣿⣿⠗⢺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠀⠀⠀
///⠀⠀⠀⠀⢸⣿⣿⣿⣿⣇⣀⣻⣇⠈⣖⣄⠀⠀⠀⢀⡤⠖⣻⢍⣁⣀⣿⣏⡀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠋⠀⠀⠀⠀
///⠀⠀⠀⠀⢸⡿⣿⣿⣿⡇⢻⢻⣿⣿⣶⡽⠂⠀⠀⠀⠀⢽⣵⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣵⣶⠖⠋⠀⠀
///⠀⠀⠀⠀⢸⡇⢸⣿⣿⣿⡈⠘⢛⣿⢿⡇⠀⠀⠀⠀⠀⠈⠡⠼⠏⣻⣿⡿⢻⠏⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀
///⠀⠀⠀⠀⢸⠁⠈⣿⣿⣿⡇⠈⠪⠷⠚⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠽⠷⠞⠃⠀⢸⣿⣿⣿⣿⢏⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣷⠀⠀⠀⠀⠀⠀⢀⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⢸⣿⣿⣿⣏⣡⣿⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠃⢸⣿⣿⣿⣿⣿⡟⠀⠉⠛⠣⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⣿⡟⠙⠢⣄⠀⠀⠀⠒⢂⠠⠀⠀⠀⠀⠀⠀⢈⡠⠔⢻⣿⣿⡟⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡿⠇⠀⠀⡨⠋⢲⠤⣀⠈⠀⢀⣀⡀⠤⢖⠞⠉⠀⠀⢸⡟⠻⣄⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡇⠀⡠⠊⠐⡄⠀⠀⡀⠉⠉⠉⠀⠀⢀⠎⠀⠀⠀⠀⠟⠀⠀⠈⢢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡁⠀⠀⠁⣆⠏⠈⢓⠒⠋⠁⣄⠞⠀⠀⠀⠀⠀⠀⠐⢈⡤⠒⠛⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⡻⣠⠀⠀⠀⡿⠀⠀⠀⠀⠀⠀⡜⠀⠀⠀⠀⠀⠀⠀⡴⠋⠀⠳⡀⠸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⠀⠀⠀⡜⠁⠀⡟⠀⠀⠀⡇⠀⠀⠀⠀⠀⢰⠁⠀⠀⠀⠀⠀⢀⠜⠀⠀⠀⠀⠀⠀⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⠀⠀⠀⣀⠠⠞⠀⠀⢀⠇⠀⠀⠀⡇⠀⠀⠀⠀⢀⡆⠀⠀⠀⠀⠀⠀⡌⠀⢀⠂⠀⠀⠀⠀⠈⡄⠀⠀⠀⠀⠀⠀⠀⠀
///⠀⠀⠀⣠⠔⠊⠁⠀⠀⠀⠀⢸⠀⠀⠀⠀⡇⠀⠀⠀⠀⡜⠀⠀⠀⠀⠀⠀⠀⡇⠀⡜⠀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀
///⣠⣖⠉⠁⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⢰⣀⡀⠀⡼⠀⠀⠀⠒⠀⠀⠠⠂⠇⢠⠁⠀⠀⠀⠀⠀⠀⠀⢇⠀⠀⠀⠀⠀⠀⠀
///⠸⣟⣿⡇⠀⠀⠀⠀⠀⠀⢠⣷⣖⡒⣆⠀⢲⣷⣉⠞⣠⠖⠒⠒⠲⢤⣤⣀⣀⣰⡜⠀⠀⠀⠀⠀⠀⠀⠀⠸⡄⠀⠀⠀⠀⠀⠀
///⠀⠀⠈⢹⡀⠀⠀⠀⠀⠀⠀⢹⣽⣒⣼⣿⣿⣿⣧⡞⠓⠒⠀⢀⣴⣯⣾⣷⡘⢻⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⠀⠀
const ll N=3e5+5;
const ll INF=1e15;
ll n,q;
ll value[4*N];
bool havlz[4*N];
ll lzs[4*N], lzv[4*N];
void push(ll id,ll il,ll ir,ll s,ll v){
value[id]=max(il*s+v, ir*s+v);
lzs[id]=s; lzv[id]=v;
havlz[id]=1;
}
void down(ll id,ll il,ll ir){
if(!havlz[id]) return;
ll im=(il+ir)>>1;
push(id*2,il,im,lzs[id],lzv[id]);
push(id*2+1,im+1,ir,lzs[id],lzv[id]);
havlz[id]=0;
}
void Update(ll id,ll il,ll ir,ll l,ll r,ll s,ll v){
if(il>r||ir<l) return;
if(l<=il&&ir<=r){
push(id,il,ir,s,v);
return;
}
ll im=(il+ir)>>1;
down(id,il,ir);
Update(id*2,il,im,l,r,s,v);
Update(id*2+1,im+1,ir,l,r,s,v);
value[id]=max(value[id*2], value[id*2+1]);
}
ll Get(ll id,ll il,ll ir,ll l,ll r){
if(il>r||ir<l) return 0;
if(l<=il&&ir<=r) return value[id];
down(id,il,ir);
ll im=(il+ir)>>1;
return max(Get(id*2,il,im,l,r),Get(id*2+1,im+1,ir,l,r));
}
set<ll>SL={-INF,+INF};
set<ll>SR={-INF,+INF};
void Uchiha_Sasuke(){
cin>>n>>q;
memset(value,0x3f,sizeof(value));
foru(turn,1,q){
int type; cin>>type;
if(type==1){
ll dir,start; cin>>dir>>start;
if(dir==0){
SL.insert(start);
ll Lim=max(1ll,*(--SL.lower_bound(start))+1);
ll cur=start;
while(cur>=Lim){
auto it=--SR.upper_bound(cur-(start-cur+1)+1);
// cerr<<start<<' '<<cur<<' '<<cur-(start-cur+1)*2+1<<'\n';
ll L=*it;
ll l=start-(start-L+1)/2+1; l=max(l,Lim);
ll r=min(cur,*next(it)-1);
Update(1,1,n,l,r,-1,+start);
cur=L-1;
}
}
else{
SR.insert(start);
ll Lim=min(n,*SR.upper_bound(start)-1);
ll cur=start;
while(cur<=Lim){
auto it=SL.lower_bound(cur+(cur-start+1)-1);
ll R=*it;
ll l=max(cur,*prev(it)+1);
ll r=start+(R-start+1)/2-1; r=min(r,Lim);
Update(1,1,n,l,r,+1,-start);
cur=R+1;
}
}
// foru(i,1,n){
// ll d=Get(1,1,n,i,i);
// if(d>INF)cout<<"oo ";
// else cout<<d<<' ';
// }
// cout<<'\n';
}
else{
ll l,r; cin>>l>>r;
ll res=Get(1,1,n,l,r);
cout<<((res<INF)?res:-1)<<'\n';
}
}
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
if(fopen("task.inp","r"))
freopen("task.inp","r",stdin),
freopen("task.out","w",stdout);
srand(time(0));
//cin>>NumTest;
for(CurTest=1;CurTest<=NumTest;CurTest++)Uchiha_Sasuke();
clock_t finish_time=clock();
double runtime=((double)finish_time-(double)start_time)/CLOCKS_PER_SEC;
cerr<<"\n---------------------------------------\nRun time : "<<fixed<<setprecision(4)<<(double)runtime<<'\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZGIgbG9uZyBkb3VibGUKI2RlZmluZSBwbGwgcGFpcjxsbCxsbD4KI2RlZmluZSBmb3J1KGksYSxiKSBmb3IobGwgaT0oYSk7aTw9KGIpO2krKykKI2RlZmluZSBmb3JkKGksYSxiKSBmb3IobGwgaT0oYSk7aT49KGIpO2ktLSkKI2RlZmluZSBBTEwoYSkgKGEpLmJlZ2luKCksKGEpLmVuZCgpCiNkZWZpbmUgUk9VTkQoaSkgZml4ZWQ8PHNldHByZWNpc2lvbihpKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNsb2NrX3Qgc3RhcnRfdGltZT1jbG9jaygpOwppbnQgTnVtVGVzdD0xLEN1clRlc3Q7Ci8vL+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjoOKhhOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDio4Dio6Dio7bio77io7/io7/ioYfioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKA4qOk4qGe4qCA4qCA4qKA4qOk4qO04qO+4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qCH4qCA4qCA4qCA4qOA4qCA4qCA4qCA4qCA4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKjoOKjtuKjv+Kjv+Kjo+KjtOKjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+KjpOKjtuKjvuKjv+Kgg+KggOKggOKggOKggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio7Tio77io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/iob/ioIHioIDio4Dio4Dio4DioaTioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKA4qO04qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qCH4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKigOKjvOKjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+KggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDioIDioIDiooDio7Tio7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/ioY/ioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qOg4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qOk4qO24qO+4qGf4qCACi8vL+KggOKggOKggOKggOKggOKggOKhsOKiueKiv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kgv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+KggeKggAovLy/ioIDioIDioIDioIDioIDioqDio7Pio7/io77io7/io7/io7/io7/ioovio7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io6fio7fio7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/ioIfioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qO44qO/4qO/4qO/4qO/4qO/4qO/4qO/4qGe4qCA4qCI4qCZ4qC/4qC/4qCf4qCb4qCJ4qCA4qCA4qK54qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qG/4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKigOKjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+KggeKggOKggOKhhOKggOKggOKggOKggOKggOKggOKgkOKhhOKjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+KggeKggOKggOKggAovLy/ioIDioIDioIDioIDiorjio7/io7/io7/io7/io7/ior/io7/io7/ioIDioIDioYwgLVRGQS3ioIDioIAg4qCA4qK74qO/4qO/4qGH4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qOn4qO04qG24qCL4qCBCi8vL+KggOKggOKggOKggOKiuOKjv+Kjv+Kjv+Kjv+Khn+Kiu+Kjv+Kjp+KhgOKggOKggOKggOKggOKggOKggOKggOKggOKggOKjgOKjgOKjvOKjv+Kjv+Kgl+KiuuKjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kgn+KggOKggOKggAovLy/ioIDioIDioIDioIDiorjio7/io7/io7/io7/io4fio4Dio7vio4fioIjio5bio4TioIDioIDioIDiooDioaTioJbio7vioo3io4Hio4Dio7/io4/ioYDiorjio7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/io7/ioIvioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qK44qG/4qO/4qO/4qO/4qGH4qK74qK74qO/4qO/4qO24qG94qCC4qCA4qCA4qCA4qCA4qK94qO14qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO/4qO14qO24qCW4qCL4qCA4qCACi8vL+KggOKggOKggOKggOKiuOKhh+KiuOKjv+Kjv+Kjv+KhiOKgmOKim+Kjv+Kiv+Khh+KggOKggOKggOKggOKggOKgiOKgoeKgvOKgj+Kju+Kjv+Khv+Kiu+Kgj+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kjv+Kgn+KggeKggOKggOKggOKggAovLy/ioIDioIDioIDioIDiorjioIHioIjio7/io7/io7/ioYfioIjioKrioLfioJrioIHioIDioIDioIDioIDioIDioIDioIDioIDioIjioL3ioLfioJ7ioIPioIDiorjio7/io7/io7/io7/ioo/io7/io7/io7/ioZ/ioIHioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qK54qO/4qO/4qO34qCA4qCA4qCA4qCA4qCA4qCA4qKA4qKg4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKg4qK44qO/4qO/4qO/4qOP4qOh4qO/4qO/4qO/4qOH4qCA4qCA4qCA4qCA4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKggOKggOKggOKggOKjv+Kjv+Kjv+Kjp+KhgOKggOKggOKggOKggOKggOKgieKggOKggOKggOKggOKggOKggOKggOKggOKggOKhsOKgg+KiuOKjv+Kjv+Kjv+Kjv+Kjv+Khn+KggOKgieKgm+Kgo+KggOKggOKggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDioIDioIDioJjio7/io7/ioZ/ioJnioKLio4TioIDioIDioIDioJLiooLioKDioIDioIDioIDioIDioIDioIDioojioaDioJTiorvio7/io7/ioZ/io7/ioI/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qK74qG/4qCH4qCA4qCA4qGo4qCL4qKy4qCk4qOA4qCI4qCA4qKA4qOA4qGA4qCk4qKW4qCe4qCJ4qCA4qCA4qK44qGf4qC74qOE4qCP4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKggOKggOKggOKggOKggOKgiOKhh+KggOKhoOKgiuKgkOKhhOKggOKggOKhgOKgieKgieKgieKggOKggOKigOKgjuKggOKggOKggOKggOKgn+KggOKggOKgiOKiouKhgOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiorDioYHioIDioIDioIHio4bioI/ioIjiopPioJLioIvioIHio4TioJ7ioIDioIDioIDioIDioIDioIDioJDioojioaTioJLioJvioYTioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qGw4qG74qOg4qCA4qCA4qCA4qG/4qCA4qCA4qCA4qCA4qCA4qCA4qGc4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qG04qCL4qCA4qCz4qGA4qC44qGA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCACi8vL+KggOKggOKggOKggOKggOKggOKggOKggOKggOKhnOKggeKggOKhn+KggOKggOKggOKhh+KggOKggOKggOKggOKggOKisOKggeKggOKggOKggOKggOKggOKigOKgnOKggOKggOKggOKggOKggOKggOKis+KggOKggOKggOKggOKggOKggOKggOKggOKggAovLy/ioIDioIDioIDioIDioIDioIDio4DioKDioJ7ioIDioIDiooDioIfioIDioIDioIDioYfioIDioIDioIDioIDiooDioYbioIDioIDioIDioIDioIDioIDioYzioIDiooDioILioIDioIDioIDioIDioIjioYTioIDioIDioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCA4qOg4qCU4qCK4qCB4qCA4qCA4qCA4qCA4qK44qCA4qCA4qCA4qCA4qGH4qCA4qCA4qCA4qCA4qGc4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qGH4qCA4qGc4qCA4qCA4qCA4qCA4qCA4qCA4qK54qGA4qCA4qCA4qCA4qCA4qCA4qCA4qCACi8vL+KjoOKjluKgieKggeKggOKggOKggOKggOKggOKggOKggOKhhOKggOKggOKggOKggOKisOKjgOKhgOKggOKhvOKggOKggOKggOKgkuKggOKggOKgoOKgguKgh+KioOKggeKggOKggOKggOKggOKggOKggOKggOKih+KggOKggOKggOKggOKggOKggOKggAovLy/ioLjio5/io7/ioYfioIDioIDioIDioIDioIDioIDioqDio7fio5bioZLio4bioIDiorLio7fio4nioJ7io6DioJbioJLioJLioLLioqTio6Tio4Dio4Dio7DioZzioIDioIDioIDioIDioIDioIDioIDioIDioLjioYTioIDioIDioIDioIDioIDioIAKLy8v4qCA4qCA4qCI4qK54qGA4qCA4qCA4qCA4qCA4qCA4qCA4qK54qO94qOS4qO84qO/4qO/4qO/4qOn4qGe4qCT4qCS4qCA4qKA4qO04qOv4qO+4qO34qGY4qK74qCB4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qKj4qCA4qCA4qCACmNvbnN0IGxsIE49M2U1KzU7CmNvbnN0IGxsIElORj0xZTE1OwpsbCBuLHE7CgoKbGwgdmFsdWVbNCpOXTsKYm9vbCBoYXZsels0Kk5dOwpsbCBsenNbNCpOXSwgbHp2WzQqTl07Cgp2b2lkIHB1c2gobGwgaWQsbGwgaWwsbGwgaXIsbGwgcyxsbCB2KXsKICAgIHZhbHVlW2lkXT1tYXgoaWwqcyt2LCBpcipzK3YpOwogICAgbHpzW2lkXT1zOyBsenZbaWRdPXY7CiAgICBoYXZseltpZF09MTsKfQp2b2lkIGRvd24obGwgaWQsbGwgaWwsbGwgaXIpewogICAgaWYoIWhhdmx6W2lkXSkgcmV0dXJuOwogICAgbGwgaW09KGlsK2lyKT4+MTsKICAgIHB1c2goaWQqMixpbCxpbSxsenNbaWRdLGx6dltpZF0pOwogICAgcHVzaChpZCoyKzEsaW0rMSxpcixsenNbaWRdLGx6dltpZF0pOwogICAgaGF2bHpbaWRdPTA7Cn0Kdm9pZCBVcGRhdGUobGwgaWQsbGwgaWwsbGwgaXIsbGwgbCxsbCByLGxsIHMsbGwgdil7CiAgICBpZihpbD5yfHxpcjxsKSByZXR1cm47CiAgICBpZihsPD1pbCYmaXI8PXIpeyAgIAogICAgICAgIHB1c2goaWQsaWwsaXIscyx2KTsKICAgICAgICByZXR1cm47ICAgICAKICAgIH0KICAgIGxsIGltPShpbCtpcik+PjE7CiAgICBkb3duKGlkLGlsLGlyKTsKICAgIFVwZGF0ZShpZCoyLGlsLGltLGwscixzLHYpOwogICAgVXBkYXRlKGlkKjIrMSxpbSsxLGlyLGwscixzLHYpOwogICAgdmFsdWVbaWRdPW1heCh2YWx1ZVtpZCoyXSwgdmFsdWVbaWQqMisxXSk7Cn0KbGwgR2V0KGxsIGlkLGxsIGlsLGxsIGlyLGxsIGwsbGwgcil7CiAgICBpZihpbD5yfHxpcjxsKSByZXR1cm4gMDsKICAgIGlmKGw8PWlsJiZpcjw9cikgcmV0dXJuIHZhbHVlW2lkXTsKICAgIGRvd24oaWQsaWwsaXIpOwogICAgbGwgaW09KGlsK2lyKT4+MTsKICAgIHJldHVybiBtYXgoR2V0KGlkKjIsaWwsaW0sbCxyKSxHZXQoaWQqMisxLGltKzEsaXIsbCxyKSk7Cn0KCnNldDxsbD5TTD17LUlORiwrSU5GfTsKc2V0PGxsPlNSPXstSU5GLCtJTkZ9OwoKdm9pZCBVY2hpaGFfU2FzdWtlKCl7CiAgICBjaW4+Pm4+PnE7CgogICAgbWVtc2V0KHZhbHVlLDB4M2Ysc2l6ZW9mKHZhbHVlKSk7CgogICAgZm9ydSh0dXJuLDEscSl7CiAgICAgICAgaW50IHR5cGU7IGNpbj4+dHlwZTsKICAgICAgICBpZih0eXBlPT0xKXsKICAgICAgICAgICAgbGwgZGlyLHN0YXJ0OyBjaW4+PmRpcj4+c3RhcnQ7CiAgICAgICAgICAgIGlmKGRpcj09MCl7IAogICAgICAgICAgICAgICAgU0wuaW5zZXJ0KHN0YXJ0KTsKICAgICAgICAgICAgICAgIGxsIExpbT1tYXgoMWxsLCooLS1TTC5sb3dlcl9ib3VuZChzdGFydCkpKzEpOwogICAgICAgICAgICAgICAgbGwgY3VyPXN0YXJ0OwogICAgICAgICAgICAgICAgd2hpbGUoY3VyPj1MaW0pewogICAgICAgICAgICAgICAgICAgIGF1dG8gaXQ9LS1TUi51cHBlcl9ib3VuZChjdXItKHN0YXJ0LWN1cisxKSsxKTsKICAgICAgICAgICAgICAgICAgICAvLyBjZXJyPDxzdGFydDw8JyAnPDxjdXI8PCcgJzw8Y3VyLShzdGFydC1jdXIrMSkqMisxPDwnXG4nOwogICAgICAgICAgICAgICAgICAgIGxsIEw9Kml0OwogICAgICAgICAgICAgICAgICAgIGxsIGw9c3RhcnQtKHN0YXJ0LUwrMSkvMisxOyBsPW1heChsLExpbSk7CiAgICAgICAgICAgICAgICAgICAgbGwgcj1taW4oY3VyLCpuZXh0KGl0KS0xKTsKICAgICAgICAgICAgICAgICAgICBVcGRhdGUoMSwxLG4sbCxyLC0xLCtzdGFydCk7CiAgICAgICAgICAgICAgICAgICAgY3VyPUwtMTsKICAgICAgICAgICAgICAgIH0gICAKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgU1IuaW5zZXJ0KHN0YXJ0KTsKICAgICAgICAgICAgICAgIGxsIExpbT1taW4obiwqU1IudXBwZXJfYm91bmQoc3RhcnQpLTEpOwogICAgICAgICAgICAgICAgbGwgY3VyPXN0YXJ0OwogICAgICAgICAgICAgICAgd2hpbGUoY3VyPD1MaW0pewogICAgICAgICAgICAgICAgICAgIGF1dG8gaXQ9U0wubG93ZXJfYm91bmQoY3VyKyhjdXItc3RhcnQrMSktMSk7CiAgICAgICAgICAgICAgICAgICAgbGwgUj0qaXQ7CiAgICAgICAgICAgICAgICAgICAgbGwgbD1tYXgoY3VyLCpwcmV2KGl0KSsxKTsKICAgICAgICAgICAgICAgICAgICBsbCByPXN0YXJ0KyhSLXN0YXJ0KzEpLzItMTsgcj1taW4ocixMaW0pOwogICAgICAgICAgICAgICAgICAgIFVwZGF0ZSgxLDEsbixsLHIsKzEsLXN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICBjdXI9UisxOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBmb3J1KGksMSxuKXsKICAgICAgICAgICAgLy8gICAgIGxsIGQ9R2V0KDEsMSxuLGksaSk7CiAgICAgICAgICAgIC8vICAgICBpZihkPklORiljb3V0PDwib28gIjsKICAgICAgICAgICAgLy8gICAgIGVsc2UgY291dDw8ZDw8JyAnOwogICAgICAgICAgICAvLyB9CiAgICAgICAgICAgIC8vIGNvdXQ8PCdcbic7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGxsIGwscjsgY2luPj5sPj5yOwogICAgICAgICAgICBsbCByZXM9R2V0KDEsMSxuLGwscik7CiAgICAgICAgICAgIGNvdXQ8PCgocmVzPElORik/cmVzOi0xKTw8J1xuJzsKICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKICAgIH0KfSAgIAoKc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIGlmKGZvcGVuKCJ0YXNrLmlucCIsInIiKSkKICAgIGZyZW9wZW4oInRhc2suaW5wIiwiciIsc3RkaW4pLAogICAgZnJlb3BlbigidGFzay5vdXQiLCJ3IixzdGRvdXQpOwogICAgc3JhbmQodGltZSgwKSk7CgogICAgLy9jaW4+Pk51bVRlc3Q7CiAgICBmb3IoQ3VyVGVzdD0xO0N1clRlc3Q8PU51bVRlc3Q7Q3VyVGVzdCsrKVVjaGloYV9TYXN1a2UoKTsKICAgIAogICAgY2xvY2tfdCBmaW5pc2hfdGltZT1jbG9jaygpOwogICAgZG91YmxlIHJ1bnRpbWU9KChkb3VibGUpZmluaXNoX3RpbWUtKGRvdWJsZSlzdGFydF90aW1lKS9DTE9DS1NfUEVSX1NFQzsKICAgIGNlcnI8PCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuUnVuIHRpbWUgOiAiPDxmaXhlZDw8c2V0cHJlY2lzaW9uKDQpPDwoZG91YmxlKXJ1bnRpbWU8PCdcbic7CiAgICByZXR1cm4gMDsKfQo=